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

时间:2010-01-29 03:58:37

标签: django forms post request submit

我有一个带有两个不同提交按钮的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 个答案:

答案 0 :(得分:29)

不要忘记将名称和值参数添加到表单的“button”或“input type = submit”字段中。我曾经遇到过同样的问题而且它让我发疯了。

简而言之,因为request.POST包含一个dict,你需要一个键和一个值。键对应于按钮的name参数,dict的值对应于按钮的值。

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

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

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

将有一个键“预览”,其值为“预览”。

答案 1 :(得分:0)

出于某种原因,在Chrome中,当我有两个使用<input/>标签的按钮时,它实际上会处理我没有点击作为输入的按钮。这样,当我测试'sendPaperButton' in request.POST之类的东西时,它会返回与我想要的相反的东西。

我将这些标记更改为<button></button>标记,但效果很好。