【问题标题】:How to get ManyToMany Field values in with selecte_related如何使用 select_related 获取 ManyToMany 字段值
【发布时间】:2021-12-29 18:09:39
【问题描述】:

我是 Django 新手。我在我的 Profile 模型中使用 ManyToMany 字段和 Membership 模型。

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    picture = models.ImageField(blank=True)
    membership = models.ManyToManyField(MemberShip, null=True)

我想做的是获得所有具有特定会员资格的用户(来自会员模式)

例如,我想要拥有 Red Membership 的所有用户的列表。我研究并发现select_related()prefetch_related 在某种程度上可以提供帮助。但我不明白如何使用这些方法来获得我想要的。

我试过了:

user_memberships_all = Profile.objects.all()
for m in user_memberships_all:
    affiliate_with_membership = m.membership.select_related('user').all()

但我收到一条错误消息Invalid field name(s) given in select_related: 'user'. 如果有另一个实现这一目标。你能帮忙吗?谢谢。

【问题讨论】:

  • 您想在哪里列出这些用户?
  • 在视图中。我正在用我迄今为止尝试过的内容更新问题。
  • @IainShelvington 你现在可以看一下吗。
  • 为什么不使用多对一关系?如果你所有的获取都是会员等级?

标签: python mysql django database


【解决方案1】:

要获取与特定 MemberShip 相关的所有用户,您可以向后跟踪 OneToOneField,然后在 ManyToManyField 上进行过滤

# Filtering on a "name" attribute of MemberShip

User.objects.filter(profile__membership__name='red')

# Using a MemberShip instance

red_membership = MemberShip.objects.get(name='red')
User.objects.filter(profile__membership=red_membership)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2022-11-10
    • 2013-05-12
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多