在多对多字段上启用Django Admin过滤器

时间:2011-03-18 21:55:53

标签: python django django-admin

我有一个类似的简单Django模型:

class Address(models.Model):
    blah

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

我想在admin中公开Address模型,以允许用户通过其关联用户过滤地址记录。 e.g。

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

ModelAdmin.list_filter属性允许这样做,但我不确定使用哪个字段名来支持我的多对多关系。如果Address模型具有对MemberData模型的直接引用,我可以执行以下操作:

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

是否存在间接多对多关系的等效语法?如果没有,是否有任何解决方法可以实现相同目的?

2 个答案:

答案 0 :(得分:7)

我相信这样的情况,你可以为你的M2M关系制作一个简单的through模型,然后使用正常的语法来跟随(现在显式的)ForeignKey。类似的东西:

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']

答案 1 :(得分:2)

我正在使用1.5,list_filter = ['memberdata__user']似乎可以正常使用。