Commit bb72aca5 authored by Karen Tracey's avatar Karen Tracey
Browse files

Fixed #12689: Fixed admin validation to report an error on invalid exclude...

Fixed #12689: Fixed admin validation to report an error on invalid exclude specification. Thanks for report to bparker and for patch with tests to ramiro.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@12734 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 48cd8e85
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -267,6 +267,19 @@ def validate_base(cls, model):
        if len(flattened_fieldsets) > len(set(flattened_fieldsets)):
            raise ImproperlyConfigured('There are duplicate field(s) in %s.fieldsets' % cls.__name__)

    # exclude
    if cls.exclude: # default value is None
        check_isseq(cls, 'exclude', cls.exclude)
        for field in cls.exclude:
            check_formfield(cls, model, opts, 'exclude', field)
            try:
                f = opts.get_field(field)
            except models.FieldDoesNotExist:
                # If we can't find a field on the model that matches,
                # it could be an extra field on the form.
                continue
        if len(cls.exclude) > len(set(cls.exclude)):
            raise ImproperlyConfigured('There are duplicate field(s) in %s.exclude' % cls.__name__)

    # form
    if hasattr(cls, 'form') and not issubclass(cls.form, BaseModelForm):
+31 −0
Original line number Diff line number Diff line
@@ -72,6 +72,37 @@ Traceback (most recent call last):
    ...
ImproperlyConfigured: 'InvalidFields.fields' refers to field 'spam' that is missing from the form.

# Tests for basic validation of 'exclude' option values (#12689)

>>> class ExcludedFields1(admin.ModelAdmin):
...     exclude = ('foo')

>>> validate(ExcludedFields1, Book)
Traceback (most recent call last):
    ...
ImproperlyConfigured: 'ExcludedFields1.exclude' must be a list or tuple.

>>> class ExcludedFields2(admin.ModelAdmin):
...     exclude = ('name', 'name')

>>> validate(ExcludedFields2, Book)
Traceback (most recent call last):
    ...
ImproperlyConfigured: There are duplicate field(s) in ExcludedFields2.exclude

>>> class ExcludedFieldsInline(admin.TabularInline):
...     model = Song
...     exclude = ('foo')

>>> class ExcludedFieldsAlbumAdmin(admin.ModelAdmin):
...     model = Album
...     inlines = [ExcludedFieldsInline]

>>> validate(ExcludedFieldsAlbumAdmin, Album)
Traceback (most recent call last):
    ...
ImproperlyConfigured: 'ExcludedFieldsInline.exclude' must be a list or tuple.

# Regression test for #9932 - exclude in InlineModelAdmin
# should not contain the ForeignKey field used in ModelAdmin.model