#python #django #forms #messages
#python #django #формы #Сообщение
Вопрос:
Я использую django-регистрация и знакомство с фреймворком форм Django. Я использовал .to_p()
метод для отображения форм, но мне нужен лучший способ представления данных формы, поэтому я читаю о фреймворке forms.
Передаются ли ошибки, переданные фреймворком form, в фреймворк сообщений Django?
Ответ №1:
Нет, они полностью разделены — как и должны быть, поскольку messages находятся в django.contrib
и, следовательно, не могут быть гарантированно включены.
Лучший способ показать ошибки — внутри самой формы, как это делает as_p
метод. Я использую тег шаблона для одновременного отображения каждого поля со связанными с ним ошибками — это модифицированная версия тега display_field Питера Баумгартнера.
Ответ №2:
Каждое поле формы имеет свои собственные сообщения об ошибках, хранящиеся в словаре … Так что
class MyForm(Form):
myfield = CharField()
nullfield = CharField(blank=True)
После вашего шага проверки, если были обнаружены некоторые ошибки формы, все они сохраняются в словаре ошибок, поэтому,
form = MyForm(request.GET)
if form.is_valid():
...
else:
# assert form errors
assert 0, form.errors
словарь ошибок формы будет выглядеть
{'myfield': [u'This field is required.']}
Таким образом, каждая ошибка будет добавлена в словарь ошибок.
Вы можете проверить этот словарь и создать единственное сообщение об ошибке или что угодно, что вы хотите сделать в своем представлении. Или в шаблоне вы можете перебирать их с помощью
{%for err in form.errors%}
........
{%endfor %}
И, как вы видите, в приложении django messages ничего нет… Если вы действительно хотите передать эти сообщения об ошибках в приложение django messages, вы можете попробовать
for error in form.errors:
request.user.message_set.create(message=form.errors['error'])
Комментарии:
1. Цитата из Стива Маконелла: Обычно вы не хотите, чтобы пользователи видели сообщения с утверждениями в производственном коде; утверждения в основном предназначены для использования во время разработки и сопровождения. Утверждения обычно компилируются в код во время разработки и компилируются из кода для производства.
Ответ №3:
Нет, не автоматически. Вам придется справиться с этим самостоятельно.
if not form.is_valid():
# loop through form.errors and
# convert that in messages.error
# where appropriate
Комментарии:
1. Своего рода проблема, потому что django-registration уже является «приложением», поэтому я не могу его изменить. Есть предложения о том, как добавить ошибки в фреймворк сообщений?