Djangorequest.POST不包含提交表单的按钮的名称

xriantvc  于 2023-07-01  发布在  Go
关注(0)|答案(2)|浏览(135)

我有一个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修改它,但这似乎有点多余,因为我很确定数据应该在某个地方。
谢谢!

9udxz4iz

9udxz4iz1#

不要忘记将name和value参数添加到表单的“button”或“input type=submit”字段中。我曾经遇到过同样的问题,它让我发疯。
简而言之,因为request.POST包含一个dict,所以你需要一个键和一个值。key对应于按钮的name参数,dict的值对应于按钮的值。

<button type="submit" value="preview">Preview</button>

将不会反映在request.POST中(POST字典中没有键!),而

<button type="submit" value="preview" name="preview">Preview</button>

将具有值为“preview”的键“preview”。

xkftehaa

xkftehaa2#

出于某种原因,在Chrome中,当我有两个使用<input/>标记的按钮时,它实际上会将我没有单击的按钮视为输入。这样,当我测试像'sendPaperButton' in request.POST这样的东西时,它将返回与我想要的相反的结果。
我把它们改成了<button></button>标签,它工作得很好。

相关问题