【问题标题】:Enabling Django Admin Filters on Many-to-Many Fields在多对多字段上启用 Django 管理过滤器
【发布时间】:2011-07-18 12:16:21
【问题描述】:

我有一个简单的 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 属性允许这样做,但我不确定使用什么字段名称来支持我的多对多关系。如果 Address 模型直接引用 MemberData 模型,我可以这样做:

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

间接多对多关系是否有任何等效的语法?如果没有,是否有任何解决方法可以达到同样的目的?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    我相信在这种情况下,您可以为您的 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']
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-08-23
        • 2020-03-20
        • 2018-06-07
        • 2015-07-18
        • 1970-01-01
        • 2016-12-13
        • 2014-11-14
        • 1970-01-01
        • 2013-08-06
        相关资源
        最近更新 更多