从ForeignKey值生成查询集

时间:2016-08-26 02:50:53

标签: django-queryset python-3.4 django-1.9

我迷失在这里。我需要生成一个查询集( qs ),该查询集由另一个 qs 的外键指向的值组成(在这里查找,在此过程中得到了光头......)。

现在,让我说我有简单的模型:

class User(models.Model):
    name = models.CharField()

class Comment(models.Model):
    user = models.ForeignKey(User, related_field="comments")

    def __str__(self):
        return "%s's comment"%self.user.name

我所拥有的是 qs 由(很多)专门选择的评论组成。说:

[<Comment: "user_A's comment">,<Comment: "user_B's comment">,...]

我需要根据我以前的 qs 的外键指向的值生成由用户组成的 qs 。现在,我不能使用values('user')来获取列表,因为生成的 qs 必须在 db 中执行进一步的操作,例如与其他用户一起< em> qs ,过滤等

我还试图通过使用.raw()来实现这个过程,但后来我得到了一个rawQuerySet对象,我也不能使用它。

查看有关extra()select_related()内容的文档,我认为可能有某种方式,但我无法弄明白。

1 个答案:

答案 0 :(得分:0)

在尝试了一些东西之后,我找到了一种方法来完全按照我的意愿行事。虽然这种方法可能效率有点,因为 db 必须被多次命中,结果是正确的格式(查询集)。对于那些遇到相同问题的人,这里是从foreignkeys指向的值生成用户的查询集的方法,给定另一个查询集,例如 comments

some_users_queryset = User.objects.filter(comments__pk__in=some_comments_queryset)
some_users_queryset = some_users_queryset.distinct()

正如我所说,我不认为这种方式效率最高,但我想在玩Django时限制使用纯SQL。

我当然希望听到一种更好,更快的方法来达到同样的效果。