summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJulien Phalip <jphalip@gmail.com>2012-03-31 18:22:12 +0000
committerJulien Phalip <jphalip@gmail.com>2012-03-31 18:22:12 +0000
commitc39e1cff9937a2d63d62f54118da3619f4418ff4 (patch)
treeb3b3463de40dafb96aacbc0583a86f1e46cd9b9a /django
parentad355e48ce07ae60648c8858faaa4c9c746c8cd8 (diff)
Fixed #17972 -- Ensured that admin filters on a foreign key respect the `to_field` attribute. This fixes a regression introduced in [14674] and Django 1.3. Thanks to graveyboat and Karen Tracey for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17854 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/filters.py5
-rw-r--r--django/contrib/admin/options.py10
2 files changed, 9 insertions, 6 deletions
diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py
index b64445ebfd..76b8d30c0d 100644
--- a/django/contrib/admin/filters.py
+++ b/django/contrib/admin/filters.py
@@ -155,7 +155,10 @@ class FieldListFilter(ListFilter):
class RelatedFieldListFilter(FieldListFilter):
def __init__(self, field, request, params, model, model_admin, field_path):
other_model = get_model_from_relation(field)
- rel_name = other_model._meta.pk.name
+ if hasattr(field, 'rel'):
+ rel_name = field.rel.get_related_field().name
+ else:
+ rel_name = other_model._meta.pk.name
self.lookup_kwarg = '%s__%s__exact' % (field_path, rel_name)
self.lookup_kwarg_isnull = '%s__isnull' % field_path
self.lookup_val = request.GET.get(self.lookup_kwarg, None)
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 73c2958103..2071792bdb 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -245,7 +245,7 @@ class BaseModelAdmin(object):
# if foo has been specificially included in the lookup list; so
# drop __id if it is the last part. However, first we need to find
# the pk attribute name.
- pk_attr_name = None
+ rel_name = None
for part in parts[:-1]:
try:
field, _, _, _ = model._meta.get_field_by_name(part)
@@ -255,13 +255,13 @@ class BaseModelAdmin(object):
return True
if hasattr(field, 'rel'):
model = field.rel.to
- pk_attr_name = model._meta.pk.name
+ rel_name = field.rel.get_related_field().name
elif isinstance(field, RelatedObject):
model = field.model
- pk_attr_name = model._meta.pk.name
+ rel_name = model._meta.pk.name
else:
- pk_attr_name = None
- if pk_attr_name and len(parts) > 1 and parts[-1] == pk_attr_name:
+ rel_name = None
+ if rel_name and len(parts) > 1 and parts[-1] == rel_name:
parts.pop()
if len(parts) == 1: