django форма не отправляется, а другая форма на странице делает? - PullRequest
0 голосов
/ 20 июня 2020

У меня две формы на странице. Первая форма правильно отправляет запрос POST в мое представление, но вторая форма отправляет GET (мне нужно, чтобы он также отправлял POST). Я делал эту ошибку раньше, и на этот раз я убедился, что кнопка настроена на «отправить», но по какой-то причине она все еще отправляет GET.

форма 1 (работает как задумано):

<form method="POST">
                {% csrf_token %}
                <div class="row form-row">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <label for="start_date">Start</label>
                      <input class="form-control" type="text" data-flatpickr data-alt-input="true" data-date-format="Y-m-d" name="start_date" data-enable-time="true">
                    </div>
                    <div class="form-group">
                      <label for="end_date">End</label>
                      <input class="form-control" type="text" data-flatpickr data-alt-input="true" data-date-format="Y-m-d" name="end_date" data-enable-time="true">                   
                    </div>
                  </div>
                  </div>
                  <input type="hidden" name="eventtype" value="availability">
                <button class="btn btn-primary" type="submit">Save changes</button>
              </form>

форма 2 (отправляет GET, но я хочу, чтобы это было POST):

<form method="POST">
  {% csrf_token %}
  {% if form.errors %}{{form.errors}}{% endif %}
  <input type="hidden" name="pk" value="{{ i.id }}">
  <input type="hidden" name="eventtype" value="invite">
  <button class="btn btn-primary" type="submit">Confirm</button>
</form>

views.py

def createevent(request):
    if request.method == 'GET':
        <<code>>
    else:
        try:
            eventtype = request.POST.get('eventtype', None)
            print(eventtype)
            if eventtype == "availability":
                form = EventForm(request.POST)
                newEvent = form.save(commit=False)
                newEvent.mentor_user = request.user
                newEvent.requester_user = None
                newEvent.notes = None
                newEvent.save()
            elif eventtype == "invite":
                form = EventForm(request.POST)
                updatedEvent = form.save(commit=False)
                updatedEvent.isConfirmed = True
                updatedEvent.save()
            return redirect('createevent')
        except ValueError:
            print(form.errors)
            return render(request, 'events/createevent.html', {'form':EventForm(), 'error':'There was an error. Please make sure you entered everything correctly!'})

urls.py

# Events
path('events/create', views.createevent, name='createevent'),
# path('calendar/<slug:slug>', views.viewevent, name='viewevent'),
path('events/<int:pk>/edit', views.updateevent, name='updateevent'),

вывод в консоль для формы 1 и формы 2:

"GET /events/create?csrfmiddlewaretoken=<<redacted>>&pk=2&eventtype=invite HTTP/1.1" 200 25560


"POST /events/create?csrfmiddlewaretoken=<<redacted>>&pk=2&eventtype=invite HTTP/1.1" 302 0

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

Проблема закончилась тем, что форма была заключена в другой тег формы, расположенный выше в коде шаблона. Когда я нажал кнопку «Отправить», кнопка «Отправить» срабатывала для первой формы, а не для второй. Просто плохая копия / вставка.

0 голосов
/ 20 июня 2020

Установите действие формы на ваш URL-адрес. Посмотрите на это:

<form name="form" method="POST" action="{% url 'your_url_name' %}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...