我有一个django表单,有两个不同的提交按钮,在表单提交的视图中,我需要知道按下了哪个提交按钮,并相应地采取不同的操作。
从我所读到的提交按钮的名称或id应该在request.POST字典中的某个地方,但它不在那里!
这是我的表单的一个片段:
<form id="editPaperForm" action="{{paper.editURL}}" method="POST">
<input type="submit" name="savePaperButton" id="savePaperButton" value="Save and Send Later"/>
<input type="submit" name="sendPaperButton" id="sendPaperButton" value="Save and send"/>
...
</form>
在视图中:
...
if 'sendPaperButton' in request.POST:
return applicants_confirmSend(request, paperID)
else:
return applicants_home(request)
sendPaperButton从来不在request.POST中,另一个也不在,我应该在其他地方寻找吗?
我唯一的想法是添加一个隐藏字段,并在发送表单之前通过JavaScript修改它,但这似乎有点多余,因为我很确定数据应该在某个地方。
谢谢!
2条答案
按热度按时间9udxz4iz1#
不要忘记将name和value参数添加到表单的“button”或“input type=submit”字段中。我曾经遇到过同样的问题,它让我发疯。
简而言之,因为request.POST包含一个dict,所以你需要一个键和一个值。key对应于按钮的name参数,dict的值对应于按钮的值。
将不会反映在request.POST中(POST字典中没有键!),而
将具有值为“preview”的键“preview”。
xkftehaa2#
出于某种原因,在Chrome中,当我有两个使用
<input/>
标记的按钮时,它实际上会将我没有单击的按钮视为输入。这样,当我测试像'sendPaperButton' in request.POST
这样的东西时,它将返回与我想要的相反的结果。我把它们改成了
<button></button>
标签,它工作得很好。