diff options
| author | Simon Charette <charette.s@gmail.com> | 2014-08-21 11:55:23 -0400 |
|---|---|---|
| committer | Simon Charette <charette.s@gmail.com> | 2014-08-27 22:05:30 -0400 |
| commit | 4c96bd8fb31d2325112ba92ed3cbdc3ff1bbfabc (patch) | |
| tree | a8a1bd14f97016c55542a850630a030e650bd9a9 /django/contrib/admin/options.py | |
| parent | 5d647e5f1755d0fa571d14e3eb60b1f886d4d059 (diff) | |
Fixed #23329 -- Allowed inherited and m2m fields to be referenced in the admin.
Thanks to Trac alias Markush2010 and ross for the detailed reports.
Backport of 3cbb759 from master
Diffstat (limited to 'django/contrib/admin/options.py')
| -rw-r--r-- | django/contrib/admin/options.py | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index e7cb85f777..bc13097951 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -284,11 +284,13 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)): return False # Make sure at least one of the models registered for this site - # references this field. + # references this field through a FK or a M2M relationship. registered_models = self.admin_site._registry - for related_object in opts.get_all_related_objects(): - if (related_object.model in registered_models and - field == related_object.field.rel.get_related_field()): + for related_object in (opts.get_all_related_objects() + + opts.get_all_related_many_to_many_objects()): + related_model = related_object.model + if (any(issubclass(model, related_model) for model in registered_models) and + related_object.field.rel.get_related_field() == field): return True return False |
