2011-03-18 61 views
14

我有一个简单的Django模型相似:启用Django管理筛选器上的许多到许多领域

class Address(models.Model): 
    blah 

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

我要揭露在管理地址模式,允许用户通过其相关联的用户过滤地址记录。例如

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

的ModelAdmin.list_filter属性允许这一点,但我不知道用什么字段名支持我的许多一对多的关系。如果地址模式有直接的参考MemberData模式,我可以这样做:

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

是否有间接的许多一对多关系的任何等同语法?如果没有,是否有任何解决方法来完成相同的目标?

回答

6

我相信在这种情况下,您可以为您的M2M关系制作一个简单的through模型,然后使用正常的语法来跟随(现在明确的)ForeignKey s。喜欢的东西:

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) 

,并在管理:

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

我使用的是1.5和list_filter = ['memberdata__user']好像它会工作。