Nomad
Sept. 21, 2020, 2:18 p.m.

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

Do you like it? Share on social networks!

2
Evgenii Legotckoi
  • Sept. 21, 2020, 2:35 p.m.

Добрый день.

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

  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
    Илья Чичак
    • Sept. 21, 2020, 5:11 p.m.
    • The answer was marked as a solution.

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

    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(...)

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

      Comments

      Only authorized users can post comments.
      Please, Log in or Sign up
      • Last comments
      • AK
        April 1, 2025, 11:41 a.m.
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        March 9, 2025, 9:02 p.m.
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        March 9, 2025, 4:14 p.m.
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        Nov. 22, 2024, 9:51 p.m.
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
      • Evgenii Legotckoi
        Oct. 31, 2024, 11:37 p.m.
        Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup