Внешнее добавление ошибок формы в Django

У меня есть форма Django, которая добавит запись в базу данных с уникальным ограничением для одного из столбцов. Если при отправке происходит попытка создания дубликата, я получаю django.db.utls. IntegrityError о том, что я нарушил уникальное ограничение (к счастью).

При обработке форм Django существует несколько способов проверки:

  1. Переопределить класс формы « clean method
  2. Переопределить класс формы» clean_ метод

Если метод clear_ вызывает ошибку django.forms.ValidationError , сообщение об ошибке будет добавлено в список в _errors словарь под названием поля. При использовании метода clean ошибки должны быть вручную вставлены в _errors dict.

Теперь clean и ] clean_ - не лучшее место для размещения кода с побочными эффектами, и я боюсь, что проверка в этот момент уникальности значения не гарантирует, что я не получу IntegrityError s. Я бы предпочел на самом деле попытаться создать строку в базе данных и сигнализировать об ошибке формы при нарушении ограничения.

Моя основная проблема в том, что формы открывают публичное свойство ошибки , которое читается -только . Следовательно, я должен, согласно документации, добавить в свою форму метод, который выполняет всю работу, попытаться вставить в базу данных и зарегистрировать ошибку при возникновении IntegrityError . Поскольку для действия, обрабатывающего форму после проверки, требуется много других данных, я не хочу помещать код внутри самого класса формы.

Есть ли другой (задокументированный или нет) способ добавить запись в errors dict извне класса, или я должен просто получить доступ к _errors "частному" переменная и быть довольным этим? Я знаю, что это звучит как нарушение ООП, но создание дополнительного метода только для доступа к этой "частной" переменной мне не кажется, что это защищает кого-либо от чего-либо.

Изменить: Похоже, кто-то уже поднял аналогичный вопрос , но кажется, что ответы указывают на ручную вставку в _errors ...

6
задан Community 23 May 2017 в 12:26
поделиться