附加到用作__in查找参数的QuerySet

蒂诺

我想检索用户或他/她的朋友创作的所有帖子:

目前,我使用Q对象:

# friends = QuerySet containing User objects
# user = User object
posts = Post.objects.filter(Q(author__in=friends) | Q(author=user))

它将生成一个如下所示的SQL查询:

SELECT ... WHERE ("posts_post"."author_id" IN (2, 3) OR "posts_post"."author_id" = 1)

问题:

是否可以将user对象附加friendsQuerySet来生成看起来像这样的查询,而不是:

SELECT ... WHERE "posts_post"."author_id" IN (2, 3, 1)

实际上,直接使用QuerySet的.append()方法确实可以:

friends.append(user)
posts = Post.objects.filter(author__in=friends)

但是,在这里和其他地方,我已经看到了许多答案,请注意不要将QuerySet视为基本列表。

后一种.append()技术安全吗?它是否有效,特别是在QuerySet非常大的情况下?还是有另一种首选方法?或者,随时告诉我我很傻,并且Q对象方法没有错!

非常感谢。

彼得·德格洛珀

查询集没有append方法,因此,如果该方法在您的上下文中有效,friends则它已经是列表而不是查询集。

至于性能-我的直觉是,查询集太大而无法放入内存,因此您可以追加到该查询集也将太大,以致于不能作为子查询。但是,与性能问题一样,测试是唯一可以确定的真正方法。

无论哪种方式,您都肯定会对性能造成影响。如果您不需要friends其他任何内容,则可以使用查询集values_list将PK仅存储到内存中,append user.id,然后根据该PK列表进行过滤。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

附加到 QuerySet 项

来自分类Dev

附加到功能的默认参数

来自分类Dev

附加到功能的默认参数

来自分类Dev

将参数附加到参数列表

来自分类Dev

将查找结果附加到txt文件

来自分类Dev

在 Unix 中查找并附加到文件

来自分类Dev

使用作业代理将sqlcmd的输出附加到文件

来自分类Dev

jQuery将参数附加到url

来自分类Dev

ngResource将POST参数附加到网址

来自分类Dev

Git别名将参数附加到末尾

来自分类Dev

类型未知时附加到python参数

来自分类Dev

附加到现有的TeamCity参数

来自分类Dev

GSP表单参数附加到参数-需要覆盖

来自分类Dev

在 C++ 中用作参数时查找数组元素的数量

来自分类Dev

Sed:查找,替换然后将结果附加到原始行

来自分类Dev

Solaris 10-查找附加到侦听端口的服务

来自分类Dev

Rails根据下拉选择将参数附加到URL

来自分类Dev

SpringBoot:使用参数将JSON附加到POST请求上

来自分类Dev

Android注释:查询参数会附加到url吗?

来自分类Dev

灰烬数据不会将参数附加到查询中

来自分类Dev

根据目标更改将URL参数附加到链接的方式

来自分类Dev

如何在C宏中附加到参数名称

来自分类Dev

Angular2将参数附加到模板网址

来自分类Dev

将逗号分隔的值附加到url作为搜索参数

来自分类Dev

NextJS-将查询参数附加到动态路由

来自分类Dev

如何使用可变参数宏附加到数组?

来自分类Dev

将UTM参数附加到我的当前URL

来自分类Dev

将命令行参数附加到Bash数组

来自分类Dev

扩展后缀附加到标记模板(JavaScript)中的参数/变量