summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2014-08-21 11:55:23 -0400
committerSimon Charette <charette.s@gmail.com>2014-08-27 21:26:53 -0400
commit3cbb7590cb0ece38f665b516db30cd5a9431f8c8 (patch)
treed157580b47bd2e0c540d79280a048cbba9160b1b /django
parent19e6397f82e82438eb3047be0233aa2e555b3a12 (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.py10
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