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

class Address(models.Model):
    blah

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

我想在admin中公开地址模型,以允许用户按关联用户筛选地址记录。例如
class AddressAdmin(admin.ModelAdmin):
    model = Address
    list_filter = [???]

modeladmin.list_filter属性允许这样做,但我不确定使用哪个字段名来支持我的多对多关系。如果地址模型直接引用了memberdata模型,我可以这样做:
class AddressAdmin(admin.ModelAdmin):
    model = Address
    list_filter = ['memberdata__user']

对于间接的多对多关系有什么等价的语法吗?如果没有,是否有解决方法来实现相同的目标?

最佳答案

我相信在这样的情况下,您可以为您的M2M关系建立一个简单的through模型,然后使用普通语法来遵循(现在显式的)ForeignKeys。

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

关于python - 在多对多字段上启用Django Admin过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5358230/

10-12 16:50