Making a complex customized Django form template? Remember to include form.non_field_errors!

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.)

This entry was posted in internets, tech and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink.

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

  1. Julius's avatar Julius says:

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

  2. maddy's avatar narutoindisguise says:

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

  3. Tyler Bye's avatar Tyler Bye says:

    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. Aral Balkan's avatar Aral Balkan says:

    Thanks for posting this, it helped me out 🙂

  5. das's avatar das says:

    this helped alot thanks

  6. Dmitri's avatar Dmitri says:

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

    Username:

    It does not display the actual text box .

    Please assist .

  7. lgespee's avatar lgespee says:

    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.

  8. Adam's avatar Adam says:

    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!

  9. ted's avatar ted says:

    THANK YOU THANK YOU THANK YOU.

  10. EconJohn's avatar EconJohn says:

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

  11. Paul Eastlund's avatar Paul Eastlund says:

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

  12. Cyril Pauya's avatar Cyril Pauya says:

    Thanks! This solved my problem.

Leave a reply to Adam Cancel reply