Django представляет две формы в одном представлении
Я пытаюсь отправить две формы в рамках одного представления. Сначала пользователь передает URL через первую форму. Затем моя программа отображает некоторые графики и в конце страницы просит пользователя заполнить форму и отправить ее. Вот как я пытаюсь решить эту проблему:
views.py:
if request == "POST":
if 'first-input-name' in request.POST: # or in request.POST.get('name')
# do something
elseif 'second-input-name' in request.POST: # or in request.POST.get('name')
# do something else
template:
<input type="submit" name="first-input-name"/>
<input type="submit" name="second-input-name"/>
Этот подход я нашел в ответах на похожие вопросы. Однако в моем requests.POST
я не нахожу имени моего входа, и поэтому не получаю ожидаемого поведения.
Есть идеи, как это решить?
Я рекомендую лучший и менее сложный подход, который заключается в создании различных урлов действий со связанными функциями:
В шаблоне:
<form action="{% url 'view-1' %}">
<input type="submit" name="first-input-name"/>
# other...
</form>
<form action="{% url 'view-2' %}">
<input type="submit" name="second-input-name"/>
# other...
</form>
В урлах:
path(first/, first_view, name="view-1"),
path(second/, second_view, name="view-2"),
В просмотрах:
def first_view(request):
if request.method == "POST":
#do something...
def second_view(request):
if request.method == "POST":
#do something...
Для уменьшения сложности кода вы можете просто иметь одну форму с двумя полями. И сделать следующее
def single_view(request):
if request.method == "POST":
# i also advice you use underscore(AKA snake_case) instead of hyphens
first_input_name = request.POST.get("first_input_name")
second_input_name = request.POST.get("second_input_name")
Это также означает, что в ваших входах будут value="first_input_name"
и value="second_input_name"
в ваших входах