Django - 如何过滤ManyToManyField?

2 投票
2 回答
2070 浏览
提问于 2025-04-16 11:06

我不太确定怎么描述我想做的事情,所以标题可能不太准确。

我有两个模型,一个是用户(User),另一个是小组(Group)。小组里面有一个字段,叫做成员(members),这个字段是一个多对多关系,指向用户。

给定一个用户,我想找到这个用户所属的所有小组。

我想的办法是这样的:

groups = Group.objects.filter(user in members)

大概就是这样。虽然我知道这可能不太对。

我试着看了这个链接,但还是搞不清楚怎么用:http://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships

谢谢!

编辑:

我搞定了!

groups = Group.objects.filter(members__username=user.username)

2 个回答

1

最简单的方法可能就是这个:

groups = user1.group_set.all()

这个方法会给你一个可以遍历的查询集。

2

如果你已经有了用户的信息,想要获取这个用户所属的群组,那就从用户开始查询,而不是反过来查询;)

下面是一个例子:

james = User.objects.get(pk= 123)
james_groups = james.group_set.all()

撰写回答