From b31568aed34d8728c153ba4e722b7018f2667351 Mon Sep 17 00:00:00 2001 From: Jacob Kaplan-Moss Date: Thu, 28 Aug 2008 15:43:04 +0000 Subject: [PATCH] Fixed #8027: correctly validate fields/fieldsets in `ModelAdmin` validation when using custom `ModelForm`s. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8662 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/validation.py | 2 +- .../admin_validation/__init__.py | 0 .../admin_validation/models.py | 43 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/regressiontests/admin_validation/__init__.py create mode 100644 tests/regressiontests/admin_validation/models.py diff --git a/django/contrib/admin/validation.py b/django/contrib/admin/validation.py index 15135af899..13d3a9d181 100644 --- a/django/contrib/admin/validation.py +++ b/django/contrib/admin/validation.py @@ -251,7 +251,7 @@ def get_field(cls, model, opts, label, field): % (cls.__name__, label, field, model.__name__)) def check_formfield(cls, model, opts, label, field): - if hasattr(cls.form, 'base_fields'): + if getattr(cls.form, 'base_fields', None): try: cls.form.base_fields[field] except KeyError: diff --git a/tests/regressiontests/admin_validation/__init__.py b/tests/regressiontests/admin_validation/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/regressiontests/admin_validation/models.py b/tests/regressiontests/admin_validation/models.py new file mode 100644 index 0000000000..bd83f80a1b --- /dev/null +++ b/tests/regressiontests/admin_validation/models.py @@ -0,0 +1,43 @@ +""" +Tests of ModelAdmin validation logic. +""" + +from django.db import models + +class Song(models.Model): + title = models.CharField(max_length=150) + + class Meta: + ordering = ('title',) + + def __unicode__(self): + return self.title + +__test__ = {'API_TESTS':""" + +>>> from django import forms +>>> from django.contrib import admin +>>> from django.contrib.admin.validation import validate + +# +# Regression test for #8027: custom ModelForms with fields/fieldsets +# + +>>> class SongForm(forms.ModelForm): +... pass + +>>> class ValidFields(admin.ModelAdmin): +... form = SongForm +... fields = ['title'] + +>>> class InvalidFields(admin.ModelAdmin): +... form = SongForm +... fields = ['spam'] + +>>> validate(ValidFields, Song) +>>> validate(InvalidFields, Song) +Traceback (most recent call last): + ... +ImproperlyConfigured: 'InvalidFields.fields' refers to field 'spam' that is missing from the form. + +"""}