У меня есть форма Django, которая добавляет запись в базу данных с уникальным ограничением на один из столбцов. Если происходит попытка создания дубликата, я получаю django.db.utls.IntegrityError
о том, что нарушил ограничение уникальности (к счастью).
При обработке форм Django существует несколько способов проверки:
- Переопределить класс формы '
clean
метод
- Переопределить класс формы '
clean_<field>
, метод
Если метод clear_<field>
вызывает значение django.forms.ValidationError
, сообщение об ошибке будет добавлено в список в словаре _errors
под именем поля. При использовании метода clean
ошибки должны быть вставлены вручную в _errors
dict.
Теперь методы clean
и clean_<field>
не кажутся хорошим местом для размещения кода с побочными эффектами, и я боюсь, что проверка на данный момент уникальности значения не гарантирует, что я не буду получить IntegrityError
с. Я бы предпочел на самом деле попытаться создать строку в базе данных и сообщить об ошибке формы при нарушении ограничения.
Моя основная проблема заключается в том, что формы предоставляют публичную собственность errors
, которая только для чтения . Поэтому я должен, согласно документам, добавить в мою форму метод, который выполняет всю работу, попытаться вставить его в базу данных и зарегистрировать ошибку при возникновении IntegrityError
. Поскольку действие, которое обрабатывает форму после проверки, требует большого количества других данных, я не хочу помещать код в сам класс формы.
Есть ли какой-либо другой (задокументированный или нет) способ добавить запись в errors
извне из класса, или я должен просто получить доступ к _errors
«закрытой» переменной и быть довольным этим? Я знаю, это звучит как нарушение ООП, но создание дополнительного метода только для доступа к этой «закрытой» переменной не кажется мне таким, как будто кто-то от кого-то ограждает.
Edit:
Похоже, кто-то другой уже поднял аналогичный вопрос , но, похоже, ответы указывают на ручную вставку в _errors
...