summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/admin/utils.py15
1 files changed, 6 insertions, 9 deletions
diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py
index 191e18fcf8..4092b67c0e 100644
--- a/django/contrib/admin/utils.py
+++ b/django/contrib/admin/utils.py
@@ -7,7 +7,6 @@ from django.contrib.auth import get_permission_codename
from django.db import models
from django.db.models.constants import LOOKUP_SEP
from django.db.models.deletion import Collector
-from django.db.models.related import RelatedObject
from django.forms.forms import pretty_name
from django.utils import formats
from django.utils.html import format_html
@@ -25,10 +24,7 @@ def lookup_needs_distinct(opts, lookup_path):
"""
field_name = lookup_path.split('__', 1)[0]
field = opts.get_field_by_name(field_name)[0]
- if ((hasattr(field, 'rel') and
- isinstance(field.rel, models.ManyToManyRel)) or
- (isinstance(field, models.related.RelatedObject) and
- not field.field.unique)):
+ if hasattr(field, 'get_path_info') and any(path.m2m for path in field.get_path_info()):
return True
return False
@@ -286,10 +282,11 @@ def label_for_field(name, model, model_admin=None, return_attr=False):
attr = None
try:
field = model._meta.get_field_by_name(name)[0]
- if isinstance(field, RelatedObject):
- label = field.opts.verbose_name
- else:
+ try:
label = field.verbose_name
+ except AttributeError:
+ # field is likely a RelatedObject
+ label = field.opts.verbose_name
except models.FieldDoesNotExist:
if name == "__unicode__":
label = force_text(model._meta.verbose_name)
@@ -337,7 +334,7 @@ def help_text_for_field(name, model):
pass
else:
field = field_data[0]
- if not isinstance(field, RelatedObject):
+ if hasattr(field, 'help_text'):
help_text = field.help_text
return smart_text(help_text)