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

发布于 2024-10-24 04:41:11 字数 637 浏览 5 评论 0原文

我有一个简单的 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']

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

I have a simple Django model resembling:

class Address(models.Model):
    blah

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

I want to expose the Address model in admin to allow a user to filter Address records by their associated user. e.g.

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

The ModelAdmin.list_filter property allows this, but I'm not sure what field name to use to support my many-to-many relationship. If the Address model has a direct reference to the MemberData model, I could do something like:

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

Is there any equivalent syntax for an indirect many-to-many relationship? If not, is there any workaround to accomplish the same end?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼角的笑意。 2024-10-31 04:41:11

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

I believe in a case like this, you could make a trivial through model for your M2M relation, and then use the normal syntax to follow the (now explicit) ForeignKeys. Something like:

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)

and in the admin:

class AddressAdmin(admin.ModelAdmin):
    model = Address
    list_filter = ['memberaddress_set__member__user']
醉态萌生 2024-10-31 04:41:11

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

I'm using 1.5 and list_filter = ['memberdata__user'] seems like it would work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文