Skip to content

Commit

Permalink
newforms-admin: Fixed #5628 -- When inlines have validation errors an…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
brosner committed Jul 10, 2008
1 parent b46dc92 commit 4772550
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
14 changes: 14 additions & 0 deletions django/contrib/admin/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,7 @@ def add_view(self, request, form_url='', extra_context=None):
'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 {})
Expand Down Expand Up @@ -616,6 +617,7 @@ def change_view(self, request, object_id, extra_context=None):
'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 {})
Expand Down Expand Up @@ -824,3 +826,15 @@ def deletion_field(self):
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())
4 changes: 2 additions & 2 deletions django/contrib/admin/templates/admin/change_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@
<div>
{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
{% if save_on_top %}{% submit_row %}{% endif %}
{% if adminform.form.errors %}
{% if errors %}
<p class="errornote">
{% 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 %}
</p>
<ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
Expand Down

0 comments on commit 4772550

Please sign in to comment.