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