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 21:26:53 -0400 |
| commit | 3cbb7590cb0ece38f665b516db30cd5a9431f8c8 (patch) | |
| tree | d157580b47bd2e0c540d79280a048cbba9160b1b /django | |
| parent | 19e6397f82e82438eb3047be0233aa2e555b3a12 (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.
Diffstat (limited to 'django')
| -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 ce89cf4dbd..3e774cc464 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -444,11 +444,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 in related_object.field.foreign_related_fields): + 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 |
