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