Filtro Django Admin en propiedad de clave externa

Quiero agregar un filtro en una lista de cambios de administración por una propiedad de una clave externa, por ejemplo

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) 

Digamos que en la lista de cambios de administración de clientes quiero mostrar un filtro por ciudad y país (así que muéstreme todos los clientes en un país o ciudad en particular).

Pero la funcionalidad estándar de list_filter () parece permitir solo el filtrado por campos directamente en el modelo y no en ninguna de sus claves externas. He intentado:

 list_filter = ("address__country",) 

o

 list_filter = ("address.country",) 

Pero siempre me sale el mismo tipo de error:

  'address__country' is not a callable or an attribute 

Cualquier sugerencia será bienvenida. ¿Existe alguna convención / syntax de nomenclatura especial para permitir el filtrado en las propiedades de FK?

Consulte https://code.djangoproject.com/ticket/3400 . Funciona bien en django 1.3 🙂

 class Room(models.Model): house = models.ForeignKey(House) def __unicode__(self): return self.house.town.name class Booking(models.Model): room = models.ForeignKey(Room) def __unicode__(self): return self.room.house.town.name class BookingOpts(admin.ModelAdmin): list_filter = ('room__house__town',) raw_id_admin = ('room', ) admin.site.register(Town) admin.site.register(House) admin.site.register(Room) admin.site.register(Booking, BookingOpts) 

He encontrado y probado la siguiente solución:

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

Funciona con ForeignKeys, pero no funciona con relaciones ManyToMany.

Me encontré con el mismo problema y realmente necesitaba una solución. Tengo una solución que le permite crear un filtro en una propiedad modelo relacionada con FK. Incluso puedes atravesar más de una relación FK. Crea una nueva subclase FilterSpec que subclasifica el RelatedFilterSpec predeterminado que se usa para proporcionarle un filtro en un campo ForeignKey.

Ver http://djangosnippets.org/snippets/2260/