Предупреждения (или даже информационные сообщения) вместо ошибок в Django - PullRequest
8 голосов
/ 16 февраля 2010

Существует ли понятие серьезности в проверке формы Джанго или это только ошибки?

Кроме того, как насчет подавления предупреждений / ошибок?

Ответы [ 2 ]

8 голосов
/ 26 февраля 2013

Старый вопрос, но я думаю, что он все еще актуален.

Это действительно зависит от того, что вы считаете предупреждением.

  • Вы можете принять частично действительные данные в своей форме (не вызывать ValidationError для полей, по которым вы хотите получать предупреждения). Затем, используя contrib.messages framework (или аналогичный), вы можете отобразить окно предупреждения на следующей странице (будь то та же страница формы, или перенаправление на домашнюю или любую другую страницу)
  • В качестве альтернативы вам может потребоваться подтверждение вместо предупреждения. Вы можете добавлять или изменять поля динамически при создании, так почему бы не добавить скрытые флажки «Я принимаю риски», которые требуются, только если ваша форма вызывает это предупреждение?

    1. Пользователь загружает форму. Флажок - скрытый ввод HTML, установленный на false.
    2. Пользователь заполняет форму данными, которые выдают предупреждение. Форма отображается снова, но теперь флажок виден.
    3. Пользователь проверяет флажок, а затем повторно отправляет свою форму.
    4. Сервер правильно обрабатывает данные и игнорирует предупреждение.

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

В вашем коде все, что вам нужно сделать, это:

#views.py
...
if form.is_valid():
    # proceed
else:
    form.fields["my_checkbox"].widget = widgets.CheckboxInput
    # re-display form
...


#forms.py
...
def clean_myfield(self):
    # do your cleaning
    if (myfield_warning==True) and not (my_checkbox==True):
        raise ValidationError("blabla")
    else:
        return myfield

По вашему мнению, вы можете при необходимости проверить наличие соответствующих ошибок в form.errors.

3 голосов
/ 16 февраля 2010

Формы Django могут вызывать только ValidationErrors (см. здесь ). Один из способов обойти это - использовать новую систему обмена сообщениями . Существует 5 уровней сообщений с возможностью определения дополнительных пользовательских уровней сообщений.

Что касается подавления ошибок / предупреждений, вы всегда можете просто игнорировать form.errors в своем шаблоне. Также взгляните на clean методы в модуле форм - вы сможете подавить некоторые предупреждения там.

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