Надлежащий способ обработать несколько форм на одной странице в Django

Причина использовать getClass состоит в том, чтобы гарантировать симметричное свойство эти equals контракт. От JavaDocs equal:

Это симметрично: поскольку любая ненулевая ссылка оценивает X и Y, x.equals (y) должен возвратить true, если и только если y.equals (x) возвращает true.

При помощи instanceof, возможно не быть симметричным. Рассмотрите пример: Собака расширяет Животное. Животное equals делает instanceof проверка Животного. Собака equals делает instanceof проверка Собаки. Дайте Животное и Собака d (с другими полями то же):

a.equals(d) --> true
d.equals(a) --> false

Это нарушает симметричное свойство.

Для строгого следования контракту equal симметрия должна быть обеспечена, и таким образом класс должен быть тем же.

175
задан Armance 5 August 2014 в 18:01
поделиться

2 ответа

У вас есть несколько вариантов:

  1. Поместите разные URL-адреса в действие для двух форм. Тогда у вас будет две разные функции просмотра для работы с двумя разными формами.

  2. Считайте значения кнопки отправки из данных POST. Вы можете узнать, какая кнопка отправки была нажата: Как создать форму django с несколькими кнопками отправки?

124
ответ дан 23 November 2019 в 20:27
поделиться

Метод для использования в будущем выглядит примерно так. bannedphraseform - первая форма, а expectedphraseform - вторая. Если срабатывает первый, второй пропускается (что в данном случае является разумным предположением):

if request.method == 'POST':
    bannedphraseform = BannedPhraseForm(request.POST, prefix='banned')
    if bannedphraseform.is_valid():
        bannedphraseform.save()
else:
    bannedphraseform = BannedPhraseForm(prefix='banned')

if request.method == 'POST' and not bannedphraseform.is_valid():
    expectedphraseform = ExpectedPhraseForm(request.POST, prefix='expected')
    bannedphraseform = BannedPhraseForm(prefix='banned')
    if expectedphraseform.is_valid():
        expectedphraseform.save()

else:
    expectedphraseform = ExpectedPhraseForm(prefix='expected')
38
ответ дан 23 November 2019 в 20:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: