Django request.POST не содержит название кнопки, отправившей форму - PullRequest
15 голосов
/ 29 января 2010

У меня есть форма django с двумя разными кнопками отправки, в представлении, куда отправляется форма, мне нужно знать, какая кнопка отправки была нажата, и соответственно предпринять различные действия.

Из того, что я прочитал, имя кнопки или кнопки отправки должно быть где-то в словаре 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 никогда не находится в запросе. POST, и ни один из них не должен искать в другом месте?

Единственная идея, которая у меня есть, - добавить скрытое поле и изменить его с помощью javascript перед отправкой формы, но это кажется излишним, поскольку я почти уверен, что данные где-то там должны быть ...

Спасибо!

Ответы [ 2 ]

29 голосов
/ 26 апреля 2010

Не забудьте добавить параметры name и value в поля «button» или «input type = submit» формы. Однажды у меня была такая же проблема, и это сводило меня с ума.

Короче говоря, поскольку request.POST содержит dict, вам нужен ключ и значение. Ключ соответствует параметру имени вашей кнопки, а значение dict - значению кнопки.

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

не будет отражено в request.POST (нет ключа для словаря POST!), Тогда как

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

будет иметь ключ «Предварительный просмотр» со значением «Предварительный просмотр».

0 голосов
/ 23 ноября 2014

По какой-то причине в Chrome, когда у меня было две кнопки, использующие теги <input/>, он фактически рассматривал кнопку, которую я не нажимал, как ввод. Таким образом, когда я тестировал что-то вроде 'sendPaperButton' in request.POST, он возвращал противоположное тому, что я хотел.

Я изменил их на <button></button> теги, и они работали нормально.

...