2011-03-18 25 views
14

tengo un simple modelo de Django parecido:Habilitación de Django administración filtros en muchos-a-muchos campos

class Address(models.Model): 
    blah 

class MemberData(models.Model): 
    user = models.ForeignKey(User) 
    addresses = models.ManyToManyField(Address) 

Quiero exponer el modelo de Dirección de administrador para permitir a un usuario filtrar registros de dirección por su usuario asociado . p.ej.

class AddressAdmin(admin.ModelAdmin): 
    model = Address 
    list_filter = [???] 

La propiedad ModelAdmin.list_filter permite esto, pero no estoy seguro de lo que el nombre del campo que se utilizará para apoyar mi relación de muchos a muchos. Si el modelo de direcciones tiene una referencia directa al modelo MemberData, podría hacer algo como:

class AddressAdmin(admin.ModelAdmin): 
    model = Address 
    list_filter = ['memberdata__user'] 

¿Hay alguna sintaxis equivalente para una relación indirecta de muchos a muchos? Si no, ¿hay alguna solución para lograr el mismo fin?

Respuesta

6

Creo que en un caso como este, podría hacer un modelo trivial through para su relación M2M, y luego usar la sintaxis normal para seguir el (ahora explícito) ForeignKey s. Algo así como:

class Address(models.Model): 
    blah 

class MemberData(models.Model): 
    user = models.ForeignKey(User) 
    addresses = models.ManyToManyField(Address,through='MemberAddress') 

class MemberAddress(models.Model): 
    member = models.ForeignKey(MemberData) 
    address = models.ForeignKey(Address) 

y en el admin:

class AddressAdmin(admin.ModelAdmin): 
    model = Address 
    list_filter = ['memberaddress_set__member__user'] 
2

estoy usando 1.5 y list_filter = ['memberdata__user'] parece que sería trabajar.

Cuestiones relacionadas