首页 > 解决方案 > 在 Django 视图中显示表格和表单

问题描述

我试图在同一个视图中返回一个表单和表格,以便它们出现在同一个屏幕上。

我知道下面的代码不起作用,它是为了说明我想要做什么 - 我有我的CreateManifestForm并且manifests = Manifests.objects.all()应该填充模板中存在的表格。问题是当我渲染它时 - 它显示了表单,并且只是空白表。我已经使用单独的视图填充了表格,因此我知道它已自行正确设置,但如何同时{'form': form}渲染context

视图.py:


def add_manifest(request):
    manifests = Manifests.objects.all()
    context = {
        'manifests' : manifests,
    }

    if request.method == "POST":
        form = CreateManifestForm(request.POST)


        if form.is_valid():
            form.save()
            return redirect('display_orders')

    else:
        form = CreateManifestForm()
        return render(request, 'add_manifest.html', {'form': form})
        return render(request, 'add_manifest.html', context)

标签: pythondjangoformsview

解决方案


您只需要在上下文中返回您需要的所有内容。你有 2 个回报,所以第二个永远不会发生。

你需要这样做;


def add_manifest(request):

    if request.method == "POST":
        form = CreateManifestForm(request.POST)

        if form.is_valid():
            form.save()
            return redirect('display_orders')

    # Leave this down here so that you don't hit 
    # the database for manifests on a POST when 
    # the form is valid, because that returns above
    form = CreateManifestForm()
    manifests = Manifests.objects.all()
    context = {
        'form': form,
        'manifests': manifests,
    }

    return render(request, 'add_manifest.html', context)

推荐阅读