summaryrefslogtreecommitdiff
path: root/django/contrib/admin/options.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/contrib/admin/options.py')
-rw-r--r--django/contrib/admin/options.py37
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(