Старый вопрос, но я думаю, что он все еще актуален.
Это действительно зависит от того, что вы считаете предупреждением.
- Вы можете принять частично действительные данные в своей форме (не вызывать ValidationError для полей, по которым вы хотите получать предупреждения). Затем, используя
contrib.messages
framework (или аналогичный), вы можете отобразить окно предупреждения на следующей странице (будь то та же страница формы, или перенаправление на домашнюю или любую другую страницу)
В качестве альтернативы вам может потребоваться подтверждение вместо предупреждения. Вы можете добавлять или изменять поля динамически при создании, так почему бы не добавить скрытые флажки «Я принимаю риски», которые требуются, только если ваша форма вызывает это предупреждение?
- Пользователь загружает форму. Флажок - скрытый ввод HTML, установленный на false.
- Пользователь заполняет форму данными, которые выдают предупреждение. Форма отображается снова, но теперь флажок виден.
- Пользователь проверяет флажок, а затем повторно отправляет свою форму.
- Сервер правильно обрабатывает данные и игнорирует предупреждение.
Преимущество второго варианта заключается в том, что он не требует файлов 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.