This drove me crazy for about 30 minutes.

If you’re making a heavily customized form template with Django, the newforms documentation suggests this format:

But, if you do any sort of non-field specific (form-level) validation, those validation messages won’t be returned to the user. So, instead of seeing a message like, “Both password fields must match,” the form just reloads without a explanation, confusing our poor end-users (and me for about 30 minutes)!

A quick #django IRC session later and I had the answer: form.non_field_errors

This did the trick for me:

I’m no professional developer, but a lack of Google search results for this matter inspired me to make a quick post and tag it well so future Django form template customizers don’t pull their hair out.

(Sorry to post the code as images, but [hosted] WordPress doesn’t escape HTML enclosed in code blocks! Ridiculous.)



13 Responses to “Making a complex customized Django form template? Remember to include form.non_field_errors!”  

  1. 1 Julius

    I didn’t even know IRC was still around. Nice.

  2. 2 narutoindisguise

    Thats awesome, I never knew it before untill today. Great job. :)

  3. Bit by this just this morning. Appreciate the post. I’m using Form Wizard and a custom layout to accomplish some mid wizard ajax validation. This post hit the spot on the form validation errors I was hitting.

    Thanks!

  4. Thanks for posting this, it helped me out :)

  5. 5 Guido García
  6. 6 das

    this helped alot thanks

  7. 7 Dmitri

    I am new to django .
    my form renders as html code

    Username:

    It does not display the actual text box .

    Please assist .

  8. 8 lgespee

    Thanks for the great tip. I couldn’t find this anywhere in Django’s documentation.

    There is however a strange thing going on, form.non_field_errors.as_ul does add the tags (I am using Django 1.0). I used a workaround by iterating manually through the non_field_errors.

  9. 9 Adam

    Thanks so much!
    I was halfway through making a custom form and view and all sorts of mess to try and get at the __all__ errors field that the template system won’t show but contained the all-important “invalid username/password” error. Luckily your post (and shortly, a git reset) saved the day!

  10. 10 ted

    THANK YOU THANK YOU THANK YOU.

  11. 11 EconJohn

    You are my hero!! Without this post I would have been banging my head against the wall all day!

  12. 12 Paul Eastlund

    Thanks! Just ran into the exact same issue — this was very helpful!

  13. Thanks! This solved my problem.


Leave a Reply