提交表格后重新显示表格

时间:2019-10-25 22:19:39

标签: django django-forms django-views

下午好,

我有一个简单的Django 2.2应用程序,供用户检入他们检出的设备。他们检出的用户和项目表占据页面顶部。在最底行,是一个文本/提交表单。我希望发生这种情况:

  1. 用户输入设备ID并提交
  2. 页面重新显示,并显示:从表中删除名称(如果成功),清除表格,清除表格旁边的成功/失败消息。

我很近。我所有的逻辑和查询都起作用,我的项目又被签回。但是,页面重新呈现,没有用户表,只是表单中还有旧数据。

views.py

class EquipmentReturn(View):

    def get(self, request, *args, **kwargs):

        # get checked out items for display table -this works

        form = ExpressCheckInForm(request.POST)
        return render(request, 'eq_return.html', 
                      context={'master_table': master_table,
                               'form': form}

   def post(self, request):

        if request.method == 'POST'
            form = ExpressCheckInForm(request.POST)
        if form.is_valid():

        # this checks the item back in (or not) and creates messages-works

        else:
            form - ExpressCheckInForm()
    return render(request, 'eq_return.html', context={'form': form}

我知道有更好的方法可以做到这一点。例如,直到我在get函数中声明它,我的表单才会出现。如何使所有这些都发生在一页上?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为类似的方法可能有效。我假设这里缺少代码,例如,您获得master_table的地方。

class EquipmentReturn(View):

    def get(self, request, *args, **kwargs):

        # get checked out items for display table -this works

        form = ExpressCheckInForm()
        return render(
            request, 'eq_return.html', 
            context={'master_table': master_table, 'form': form},
        )

   def post(self, request):
        form = ExpressCheckInForm(request.POST)
        if form.is_valid():
            # this checks the item back in (or not) and creates messages-works
            # after saving the form or whatever you want, you just need to redirect back
            # to your url. It will call get again and start over
            return HttpResonseRedirect(reverse('your-url-name'))

    return render(request, 'eq_return.html', context={'form': form})

您似乎仍处于基于函数的视图思维方式中。搜索差异以及如何理解和使用基于类的视图。