Commit 0aeb1e13 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Refs #12203 -- Improved error handling for the case where a user manually...

Refs #12203 -- Improved error handling for the case where a user manually specifies an m2m field with an explicit through field. Thanks to dgouldin for the report, and Ramiro Morales for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@11737 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent dd045aaa
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -196,6 +196,9 @@ def validate_base(cls, model):
        check_isseq(cls, 'fields', cls.fields)
        for field in cls.fields:
            check_formfield(cls, model, opts, 'fields', field)
            f = get_field(cls, model, opts, 'fields', field)
            if isinstance(f, models.ManyToManyField) and not f.rel.through._meta.auto_created:
                raise ImproperlyConfigured("'%s.fields' can't include the ManyToManyField field '%s' because '%s' manually specifies a 'through' model." % (cls.__name__, field, field))
        if cls.fieldsets:
            raise ImproperlyConfigured('Both fieldsets and fields are specified in %s.' % cls.__name__)
        if len(cls.fields) > len(set(cls.fields)):
+12 −1
Original line number Diff line number Diff line
@@ -108,7 +108,18 @@ Exception: <class 'regressiontests.admin_validation.models.TwoAlbumFKAndAnE'> ha

>>> validate_inline(TwoAlbumFKAndAnEInline, None, Album)

# Regression test for #12203 -- If the explicitly provided through model
# Regression test for #12203 - Fail more gracefully when a M2M field that
# specifies the 'through' option is included in the 'fields' ModelAdmin option.

>>> class BookAdmin(admin.ModelAdmin):
...     fields = ['authors']

>>> validate(BookAdmin, Book)
Traceback (most recent call last):
    ...
ImproperlyConfigured: 'BookAdmin.fields' can't include the ManyToManyField field 'authors' because 'authors' manually specifies a 'through' model.

# Regression test for #12209 -- If the explicitly provided through model
# is specified as a string, the admin should still be able use
# Model.m2m_field.through