Django request.POST не содержит имя кнопки, которая отправила форму

У меня есть форма 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 перед отправкой формы, но это кажется излишним, поскольку я уверен, что данные должны быть где-то там...

Спасибо!

Ответы

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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