在多对多字段上启用Django Admin过滤器
我有一个简单的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']
那么,对于间接的多对多关系,有没有类似的语法呢?如果没有,有没有其他方法可以实现同样的效果?
2 个回答
5
我正在使用1.5版本,list_filter = ['memberdata__user']
看起来可以用。
9
我认为在这种情况下,你可以为你的多对多关系创建一个简单的 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']