2011-03-18 60 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']好像它會工作。