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" в ваших входах

Вернуться на верх