python - 在多对多字段上启用 Django 管理过滤器

标签 python django 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 属性允许这样做,但我不确定要使用什么字段名称来支持我的多对多关系。如果 Address 模型直接引用 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 管理过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358230/

相关文章:

python - 如何将多个数据框写入一张 Excel 工作表?

Python 社交验证 : How to define a different username scheme?

python - 如何在 PythonAnywhere 上将变量打印到 Bash 控制台?

python - 在 Django 中自定义 TabularInline

python - Django Admin - 禁用 FK 字段更新

python - 如何在启动时运行 Django 开发服务器?

python - 在指定 update_fields 时使用 pre_save

Python:从正则表达式中排除空格

python - Library not loaded : @rpath/libmysqlclient. 21.dylib Reason: image not found Django migrate error using mysqlclient DB 驱动程序和 MySQL 8 with macOS

django - 如何将日期时间字段添加到管理员更改列表的 search_fields