Nomad
Қыр. 21, 2020, 2:18 Т.Қ.

2 форму на одной странице

django, forms, modelform, view

Всем привет.

в моем проекте каждый зарегистрированный пользователь имеит возможность поменять свой пароль
для реализации данного функционала, я переопределил стандартный PasswordChangeView, переопределение состоит в том что я просто указал "template_name" и "success_url"
все работает гуд.
теперь появилась нужда на той же странице с формой смены пароля добавить еше одну форму (со своим субмитом) , связанное с одним полем моделью пользователя, тип данного поля:

user_status = models.IntegerField(default=0, blank=True, null=True, choices=TRAIDER_STATUS) где TRAIDER_STATUS это 3 варианта.

в итоге получается что на одной странице есть 2 формы связанные с моделью пользователя и у каждой формы есть своя кнопка субмит

обработка данной страницы, как я понимаю, делается путем во первых надо понять какой субмит нажали (те какая из форм сработала) и потом включить логику о обработки данного субмита.

Может кто посоветовать как реализовать или скинуть какие то ссылки на реализацию ?????

всем заранее спасибо

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

2
Evgenii Legotckoi
  • Қыр. 21, 2020, 2:35 Т.Қ.

Добрый день.

Чтобы понять, какой сабмит нажали, можно добавить имя к кнопке, например у меня есть два действия для сохранения статьи, ситуация похожая как у вас, просто в одной форме.

  1. <div class="form-group btn-toolbar mb-0">
  2. <button type="submit" name="save" class="btn btn-primary btn-raised mr-2 mdi mdi-content-save">{% trans "Save" %}</button>
  3. <button type="submit" name="publish" class="btn btn-secondary" title="{% trans "Save and publish article" %}">{% trans "Publish" %}</button>
  4. </div>

Здесь есть save и publish

А потом во view я просто делаю проверку

  1. if 'publish' in self.request.POST:
  2. # ToDo publish actions
  3. if 'save' in self.request.POST:
  4. # ToDo save actions
    Илья Чичак
    • Қыр. 21, 2020, 5:11 Т.Қ.
    • Жауап шешім ретінде белгіленді.

    а можно просто сделать вторую форму с разделением обработчиков

    1. <form action="{% url 'change_password_view' %}">
    2. {{ change_password_form }}
    3. <input type="submit">
    4. </form>
    5. <form action="{% url 'change_something_view' %}">
    6. {{ another_form }}
    7. <input type="submit">
    8. </form>

    или можно даже без экшенов в форме:

    1. def process(request):
    2. change_password_form = ChangePassowordForm(request.POST or None)
    3. change_something_form = ChangeSomethingForm(request.POST or None)
    4. if change_password_form.is_valid():
    5. # change_password_form.process()
    6. elif change_something_form.is_valid():
    7. # change_something_form.process()
    8. return render(...)

    в посте прилетит содержимое только той формы, к которой сабмит относится
    если заполнена форма смены пароля, вторая форма просто будет не валидна и код не выполнится и наоборот

      Пікірлер

      Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
      Кіріңіз немесе Тіркеліңіз