Django 表单提交后重新显示表格

Django 表单提交后重新显示表格,django,django-forms,django-views,Django,Django Forms,Django Views,下午好 我有一个简单的Django 2.2应用程序,供用户签入他们签出的设备。页面顶部有一个用户表和他们签出的项目。最下面一行是一个文本/提交表单。我希望这样做: 用户输入设备id并提交 页面重新显示:成功时从表中删除名称、表单清除、清除表单旁的成功/失败消息。 我很接近。我的所有逻辑和查询工作正常,我的项被检入。但是,页面重新呈现时没有用户表,只有包含旧数据的表单 views.py class EquipmentReturn(View): def get(self, request,

下午好

我有一个简单的Django 2.2应用程序,供用户签入他们签出的设备。页面顶部有一个用户表和他们签出的项目。最下面一行是一个文本/提交表单。我希望这样做:

用户输入设备id并提交 页面重新显示:成功时从表中删除名称、表单清除、清除表单旁的成功/失败消息。 我很接近。我的所有逻辑和查询工作正常,我的项被检入。但是,页面重新呈现时没有用户表,只有包含旧数据的表单

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函数中声明之前不会出现。我怎样才能在一页纸上完成这一切?谢谢

我想这样的办法可能行得通。我假设这里缺少代码,例如,在哪里可以得到master_表


看起来您仍然处于基于函数的视图心态。搜索差异以及如何理解和使用基于类的视图。

从我看到的情况来看,从文章返回时,您没有在上下文中传递master_表。你能添加'eq_return.html'吗?另外,您不需要询问方法是否为POST,您已经在POST方法中了。也许这可以通过其他一些基于类的视图来实现,比如UpdateView或FormView谢谢你的评论。我考虑过更新视图。这能解决这个问题吗?因此,要这样做,我必须编写查询逻辑,并在get和post方法的上下文中传递表和表单?谢谢。成功了!在我发布之前,我再次回顾了CBV,文档非常好。我会再复习一遍,显然我是糊涂了。
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})