如何嵌套Django SELECT?

时间:2009-10-10 09:35:07

标签: python mysql django

class Friendship(models.Model):
    from_friend = models.ForeignKey(User, related_name='friend_set')
    to_friend = models.ForeignKey(User, related_name='to_friend_set')

我想选择所有来自from_friend =某个用户的to_friends。

然后,我想将to_friends传递给另一个.objects.filter()中的内部过滤器。这是这样做的吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

  

我想SELECT所有to_friends from_friend =某个用户。{/ p>

您可以像这样获得此步骤的所有友谊对象:

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

然后,您可以使用查询集的values_list方法将所有to_friend字段放入平面列表中:

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

此时friends是一个ValuesListQuery对象,就像列表一样工作。您可以迭代朋友并使用其他filter()调用中的值。

答案 1 :(得分:2)

正如pccardune所说,你会得到像这样的相关用户:

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

但实际上你可以将它直接传递给你的下一个查询:

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

答案 2 :(得分:2)

这似乎会返回所需的结果

User.objects.filter(to_friend_set__from_friend=1)