diff options
Diffstat (limited to 'django/contrib/admin/options.py')
| -rw-r--r-- | django/contrib/admin/options.py | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index b0635669e9..f9760664dd 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -160,6 +160,8 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): If kwargs are given, they're passed to the form Field's constructor. """ + from django.contrib.admin.sites import NotRegistered + # If the field specifies choices, we don't need to look for special # admin widgets - we just need to use a select widget of some kind. if db_field.choices: @@ -185,23 +187,27 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): # rendered output. formfield can be None if it came from a # OneToOneField with parent_link=True or a M2M intermediary. if formfield and db_field.name not in self.raw_id_fields: - related_modeladmin = self.admin_site._registry.get( - db_field.remote_field.model - ) - wrapper_kwargs = {} - if related_modeladmin: - wrapper_kwargs.update( - can_add_related=related_modeladmin.has_add_permission(request), - can_change_related=related_modeladmin.has_change_permission( + try: + related_modeladmin = self.admin_site.get_model_admin( + db_field.remote_field.model + ) + except NotRegistered: + wrapper_kwargs = {} + else: + wrapper_kwargs = { + "can_add_related": related_modeladmin.has_add_permission( request ), - can_delete_related=related_modeladmin.has_delete_permission( + "can_change_related": related_modeladmin.has_change_permission( request ), - can_view_related=related_modeladmin.has_view_permission( + "can_delete_related": related_modeladmin.has_delete_permission( request ), - ) + "can_view_related": related_modeladmin.has_view_permission( + request + ), + } formfield.widget = widgets.RelatedFieldWidgetWrapper( formfield.widget, db_field.remote_field, @@ -246,8 +252,13 @@ class BaseModelAdmin(metaclass=forms.MediaDefiningClass): ordering. Otherwise don't specify the queryset, let the field decide (return None in that case). """ - related_admin = self.admin_site._registry.get(db_field.remote_field.model) - if related_admin is not None: + from django.contrib.admin.sites import NotRegistered + + try: + related_admin = self.admin_site.get_model_admin(db_field.remote_field.model) + except NotRegistered: + return None + else: ordering = related_admin.get_ordering(request) if ordering is not None and ordering != (): return db_field.remote_field.model._default_manager.using(db).order_by( |
