Причина использовать 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 симметрия должна быть обеспечена, и таким образом класс должен быть тем же.
У вас есть несколько вариантов:
Поместите разные URL-адреса в действие для двух форм. Тогда у вас будет две разные функции просмотра для работы с двумя разными формами.
Считайте значения кнопки отправки из данных POST. Вы можете узнать, какая кнопка отправки была нажата: Как создать форму django с несколькими кнопками отправки?
Метод для использования в будущем выглядит примерно так. 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')