views:

426

answers:

2

I want to add a filter in an admin changelist by a property of a foreign key, e.g.

class Address(model.Models):
    street = models.CharField(max_length=25)        
    city = models.CharField(max_length=25)
    country = models.CharField(max_length=25)        

class Customer(models.Model):
    name = models.CharField(max_length=25)
    address = models.ForeignKey(Address)

Let's say in the Customer admin changelist I want to show a filter by city and country (so show me all customers in a particular country or city).

But the standard list_filter() functionality seems to only allow filtering by fields directly on the model and not on any of its foreign key. I've tried:

list_filter = ("address__country",)

or

list_filter = ("address.country",)

but I always get the same type of error:

 'address__country' is not a callable or an attribute 

Any suggestions would be welcome. Is there some special naming convention/syntax to allow filtering on FK properties?

+1  A: 

I have found and tested following solution:

http://www.djangosnippets.org/snippets/1911/

It works with ForeignKeys, but it doesn't work with ManyToMany relations.

Dominik Szopa