Django ModelForm is_valid () типы ошибок - PullRequest
2 голосов
/ 05 ноября 2010

У меня есть EmailField(primary_key=True). Я использую ModelForm для рендеринга формы для пользователя, а в ответной записи я звоню form.is_valid().

Я вижу два типа ошибок в этом поле. Одним из них является ограничение уникального значения первичного ключа (этот адрес электронной почты уже существует). Другой - неверный адрес электронной почты.

Я бы хотел по-разному реагировать на каждую ошибку. Есть ли простой способ определить, что ошибка проверки была вызвана фактической ошибкой входного формата по сравнению с уникальным ограничением?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2010

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

Сначала переопределите метод validate_unique в моем определении ModelForm.

from django.forms import ModelForm
from apps.announcer.models import Subscriber

class SubscribeForm(ModelForm):
    class Meta:
        model = Subscriber
        exclude = ('created',)

    def validate_unique(self):
        pass

Поскольку метод validate_unique был преобразован в noop, представление должно выполнить любую необходимую ему проверку. Поэтому вместо звонка form.save() звоните entity = form.save(commit=False). Выполните необходимую проверку сущности и при необходимости вызовите entity.save().

1 голос
/ 05 ноября 2010

Не могли бы вы сначала проверить уже существующий ключ, а затем позвонить is_valid()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...