Как сделать кнопку выбора в многошаговом мастере форм в Django, которая отображает вывод, не переходя к следующему шагу?

Я новичок в Django и делаю проект с многошаговой формой, используя django-formtools. Проблема в том, что в моей форме шага 2 у меня есть поля выбора, которые мне нужно передать в серверной части, чтобы выполнить некоторые вычисления, а затем отобразить вывод. Пользователь может вносить изменения в любое время на основе вывода. Я сделал кнопку apply changes, которая должна запускать серверный процесс, и кнопку proceed to next step, если пользователь решит завершить выбранные изменения. Однако, когда я нажимаю кнопку apply changes, вместо этого я перехожу к следующему шагу.

Вот мой код HTML:

<form action="" method="POST">
  {% csrf_token %}
  {{ wizard.management_form }}
  {% if wizard.form.forms %}
      {{ wizard.form.management_form }}
      {% for form in wizard.form.forms %}
          {{ form }}
      {% endfor %}
  {% else %}
      {{ form }} # three selection fields
      <button name="apply_changes">Apply Changes</button>
  {% endif %}

  {% if wizard.steps.prev %}
      <button name="wizard_goto_step" type="submit" value="{{ wizard.steps.prev }}">{% trans '&#8249; Previous Step' %}</button>
  {% endif %}
  <input type="submit" value="{% trans 'Finish' %}"> 
</form>

Вот фрагмент кода моего метода SessionWizardView:

def get_context_data(self, form, **kwargs):

  context = super(StepWizard, self).get_context_data(form=form, **kwargs)

  if self.steps.current == 'step_1':
    # save step 1 data to sessions

  if self.steps.current == 'step_2':
    step1_data = self.get_all_cleaned_data()
    # if apply changes button is clicked
      data = self.request.POST.get('apply_changes')
      # process data
      # add output to context
  return context

Мне нужна помощь в том, как это можно сделать правильно. Заранее спасибо!


person Semb    schedule 20.11.2019    source источник


Ответы (1)


Итак, для будущих разработчиков django, которые столкнулись с той же проблемой, что и я, вот ответ на мой вопрос:

1) проверить данные на шаге 2, которые временно являются значениями по умолчанию для моих полей выбора; и 2) переопределить метод post для загрузки текущей страницы с помощью функции мастера goto_step и встроить ее в кнопку apply changes

Вы можете найти руководство здесь:)

А потом пошли! Как только пользователь нажимает кнопку apply changes, страница перезагружается, и вывод отображается в форме.

Все равно нужно оптимизировать :D

person Semb    schedule 22.11.2019