Использует ли фреймворк form в Django фреймворк сообщений Django?

#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 уже является «приложением», поэтому я не могу его изменить. Есть предложения о том, как добавить ошибки в фреймворк сообщений?