确定在 Django 表单提交中单击了哪个提交按钮
Posted
技术标签:
【中文标题】确定在 Django 表单提交中单击了哪个提交按钮【英文标题】:Identify which submit button was clicked in Django form submit 【发布时间】:2014-02-25 15:13:28 【问题描述】:在 Django 中,我想要一个带有 2 个提交按钮选项的表单。 “保存并回家”和“保存并下一步”。
有什么想法可以确定在我的视图中单击了哪个提交按钮?
我对编程/使用表单还很陌生,感谢您的反馈。
表格
<form action="% url 'price_assessment_section_1' component.id %" method="post"> % csrf_token %
form.s1_q5_resin_type
<!-- FORM SUBMIT BUTTONS-->
<button type="submit" > Save&Home</button>
<button type="submit" > Save&Next</button>
</form> <!-- end form-->
查看
@login_required
def price_assessment_section_1(request, component_id):
component = Component.objects.get(id=component_id)
if request.method == 'POST':
form = PriceAssessmentSection1(request.POST)
# if "save & home" go to: return HttpResponseRedirect(reverse('portal_home'))
# if "save & next" go to: return HttpResponseRedirect(reverse('portal_sec2'))
form = PriceAssessmentSection1()
return render(request, 'portal/price_assessment_section_1.html', 'form': form, 'component':component)
【问题讨论】:
【参考方案1】:你可以给他们起名字。只有单击的按钮通过提交发送数据。在你的模板中给他们适当的名字:
<button type="submit" name="save_home" value="Save&Home"> Save&Home</button>
<button type="submit" name="save_next" value="Save&Next"> Save&Next</button>
在相关部分的视图中,您可以通过检查其名称来检查单击了哪个按钮。
if request.method == 'POST':
form = PriceAssessmentSection1(request.POST)
if request.POST.get("save_home"):
return HttpResponseRedirect(reverse('portal_home'))
elif request.POST.get("save_next"): # You can use else in here too if there is only 2 submit types.
return HttpResponseRedirect(reverse('portal_sec2'))
【讨论】:
完美!感谢您的反馈 我必须添加到答案中的一件事是每个按钮的“value=1”。 它仅适用于 。不适用于按钮。 不要忘记为按钮添加价值。它会像魅力一样起作用! 如果有多个按钮,理想的方法是什么?我不喜欢为所有这些人写 if else 阶梯。【参考方案2】:在 Django 2.x 中,视图方法@FallenAngel 的回答略有变化
if request.method == 'POST':
form = PriceAssessmentSection1(request.POST)
# Note change below
if 'save_home' in request.POST:
return HttpResponseRedirect(reverse('portal_home'))
# Note change below
elif 'save_next' in request.POST: # You can use else in here too if there is only 2 submit types.
return HttpResponseRedirect(reverse('portal_sec2'))
【讨论】:
以上是关于确定在 Django 表单提交中单击了哪个提交按钮的主要内容,如果未能解决你的问题,请参考以下文章
Django request.POST 不包含提交表单的按钮的名称