【问题标题】:How to do nested Django SELECT?如何做嵌套的Django SELECT?
【发布时间】:2009-10-10 09:35:07
【问题描述】:
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() 中的内部过滤器。这是这样做的方法吗?

谢谢!

【问题讨论】:

    标签: python mysql django


    【解决方案1】:

    我想SELECT 拥有from_friend = 某个用户的所有to_friends

    您可以像这样获取此步骤的所有 Friendship 对象:

    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)
      

      【讨论】:

        【解决方案3】:

        这似乎返回了所需的结果

        User.objects.filter(to_friend_set__from_friend=1)
        

        【讨论】:

          猜你喜欢
          • 2018-11-01
          • 2013-04-09
          • 1970-01-01
          • 2010-10-06
          • 1970-01-01
          • 2019-06-22
          • 2014-12-03
          • 1970-01-01
          • 2020-02-09
          相关资源
          最近更新 更多