如何进行嵌套的Django SELECT?

4 投票
3 回答
3768 浏览
提问于 2025-04-15 14:58
class Friendship(models.Model):
    from_friend = models.ForeignKey(User, related_name='friend_set')
    to_friend = models.ForeignKey(User, related_name='to_friend_set')

我想要选择所有的to_friends,这些to_friends的from_friend是某个特定的用户。

然后,我想把这些to_friends传递给另一个.filter()里面的filter。这样做可以吗?

谢谢!

3 个回答

2

这段代码看起来能得到我们想要的结果。

User.objects.filter(to_friend_set__from_friend=1)
3

我想要选择所有的 to_friends,这些朋友的 from_friend 是某个特定的用户。

你可以通过下面的方式获取所有的友情对象:

friendships = Friendship.objects.filter(from_friend=some_user)

然后,你可以使用查询集的 values_list 方法,把所有的 to_friend 字段放到一个简单的列表里:

friends = friendships.values_list("to_friend", flat=True)

到这一步,friends 是一个 ValuesListQuery 对象,它的用法和列表一样。你可以遍历这些朋友,并在其他的 filter() 调用中使用这些值。

2

正如pccardune所说,你可以这样获取相关的用户:

friendships = Friendship.objects.filter(from_friend=some_user)

但实际上,你可以直接把这个结果放到你下一个查询中:

second_select = Whatever.objects.filter(friend__in=friendships)

撰写回答