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>
, и он работал нормально.