2014-02-11 2 views
1

Я пытаюсь назначить произвольную ошибку формы для поля в modelform в django, чтобы он отображался там, где «стандартная» ошибка, такая как поле остается пустым , с тем же форматированием (которое обрабатывается хрустящими формами).Назначение пользовательской формы ошибки для поля в modelform в django

Моя модель форма чистый метод выглядит следующим образом:

def clean(self): 
    cleaned_data = super(CreatorForm, self).clean() 
    try: 
     if cleaned_data['email'] != cleaned_data['re_email']: 
      raise forms.ValidationError({'email': "Your emails don't match!"}) 
    except KeyError: 
     pass 
    return cleaned_data 

И в моем шаблоне я отображения формы/повторно представлены формы, как это:

{{creator_form|crispy}} 

Я хотел ошибку появляться ниже поля re_email, если это возможно (хотя в настоящее время мне показалось, что мне лучше повезти, если он окажется ниже поля электронной почты. В настоящий момент он отображается в верхней части формы, неформатирован.

Для поля re_email, несмотря на то, что он не является частью модели, ошибка, отображаемая для ее останова, отображается ниже поля re_email. Как «присоединить» ошибки к полям, чтобы они отображались под ними/рядом с ними?

Все помощь ценится благодаря

ответ

3

Чтобы получить ошибки, чтобы отобразить на конкретном поле, которое необходимо явно определить, какое поле ошибка происходит, так как вы перекрывая .clean(). Вот пример, взятый из Django docs:

class ContactForm(forms.Form): 
    # Everything as before. 
    ... 

    def clean(self): 
     cleaned_data = super(ContactForm, self).clean() 
     cc_myself = cleaned_data.get("cc_myself") 
     subject = cleaned_data.get("subject") 

     if cc_myself and subject and "help" not in subject: 
      # We know these are not in self._errors now (see discussion 
      # below). 
      msg = u"Must put 'help' in subject when cc'ing yourself." 
      self._errors["cc_myself"] = self.error_class([msg]) 
      self._errors["subject"] = self.error_class([msg]) 

      # These fields are no longer valid. Remove them from the 
      # cleaned data. 
      del cleaned_data["cc_myself"] 
      del cleaned_data["subject"] 

     # Always return the full collection of cleaned data. 
     return cleaned_data 
+0

классный, спасибо scott – holmeswatson

Смежные вопросы