diff options
| author | Julien Phalip <jphalip@gmail.com> | 2012-03-31 18:22:12 +0000 |
|---|---|---|
| committer | Julien Phalip <jphalip@gmail.com> | 2012-03-31 18:22:12 +0000 |
| commit | c39e1cff9937a2d63d62f54118da3619f4418ff4 (patch) | |
| tree | b3b3463de40dafb96aacbc0583a86f1e46cd9b9a /django | |
| parent | ad355e48ce07ae60648c8858faaa4c9c746c8cd8 (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.py | 5 | ||||
| -rw-r--r-- | django/contrib/admin/options.py | 10 |
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: |
