From 4772550a3cfac7792903dc0e4ed2629199a260c4 Mon Sep 17 00:00:00 2001 From: Brian Rosner Date: Thu, 10 Jul 2008 20:24:46 +0000 Subject: [PATCH] newforms-admin: Fixed #5628 -- When inlines have validation errors an error message is now displayed at the top of the page. Thanks Petr Marhoun for the improved patch. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7878 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/options.py | 14 ++++++++++++++ .../contrib/admin/templates/admin/change_form.html | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index b83b68c6ae..234cfd11ef 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -539,6 +539,7 @@ class ModelAdmin(BaseModelAdmin): 'show_delete': False, 'media': mark_safe(media), 'inline_admin_formsets': inline_admin_formsets, + 'errors': AdminErrorList(form, inline_formsets), 'root_path': self.admin_site.root_path, } context.update(extra_context or {}) @@ -616,6 +617,7 @@ class ModelAdmin(BaseModelAdmin): 'is_popup': request.REQUEST.has_key('_popup'), 'media': mark_safe(media), 'inline_admin_formsets': inline_admin_formsets, + 'errors': AdminErrorList(form, inline_formsets), 'root_path': self.admin_site.root_path, } context.update(extra_context or {}) @@ -824,3 +826,15 @@ class InlineAdminForm(AdminForm): def ordering_field(self): from django.newforms.formsets import ORDERING_FIELD_NAME return AdminField(self.form, ORDERING_FIELD_NAME, False) + +class AdminErrorList(forms.util.ErrorList): + """ + Stores all errors for the form/formsets in an add/change stage view. + """ + def __init__(self, form, inline_formsets): + if form.is_bound: + self.extend(form.errors.values()) + for inline_formset in inline_formsets: + self.extend(inline_formset.non_form_errors()) + for errors_in_inline_form in inline_formset.errors: + self.extend(errors_in_inline_form.values()) diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index 769b5c3240..e8df6b99f5 100644 --- a/django/contrib/admin/templates/admin/change_form.html +++ b/django/contrib/admin/templates/admin/change_form.html @@ -32,9 +32,9 @@
{% if is_popup %}{% endif %} {% if save_on_top %}{% submit_row %}{% endif %} -{% if adminform.form.errors %} +{% if errors %}

- {% blocktrans count adminform.form.errors.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %} + {% blocktrans count errors.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}

{% endif %}