【问题标题】:Generate a queryset from ForeignKey values从 ForeignKey 值生成查询集
【发布时间】:2017-01-02 14:43:59
【问题描述】:

我在这里迷路了。我需要生成一个由另一个 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 的外键指向的值生成一个由 Users 组成的 qs。现在,我不能只使用values('user') 来获取列表,因为生成的 qs 必须在 db 中执行进一步的操作,例如加入其他用户 qs、过滤等

我还尝试通过使用 .raw() 来暴力破解该过程并取得了一些成功,但随后我得到了一个 rawQuerySet 对象,我也无法使用它。

查看有关extra()select_related() 的文档,我认为可能有某种方法,但我想不通。

【问题讨论】:

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


    【解决方案1】:

    在尝试了各种方法之后,我找到了一种方法来做我想做的事。尽管由于 db 必须被多次命中,因此该方法可能效率低下,但结果是正确的格式(查询集)。对于那些遇到同样问题的人,这里是根据外键指向的值生成 users 查询集的方法,给定另一个查询集,例如 cmets

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

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

    当然,我很想听听一个更好、更快的方法来达到同样的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2019-05-26
      • 2011-04-29
      • 2022-01-07
      • 1970-01-01
      • 2019-07-01
      相关资源
      最近更新 更多