我迷失在这里。我需要生成一个查询集( 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()
内容的文档,我认为可能有某种方式,但我无法弄明白。
答案 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。
我当然希望听到一种更好,更快的方法来达到同样的效果。