我想检索用户或他/她的朋友撰写的所有帖子:
目前,我使用 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
对象附加到friends
QuerySet 以生成如下所示的查询,而不是:
SELECT ... WHERE "posts_post"."author_id" IN (2, 3, 1)
直接使用 QuerySet 的 .append() 方法确实有效:
friends.append(user)
posts = Post.objects.filter(author__in=friends)
但是,我在这里和其他地方看到了许多答案,警告不要将 QuerySets 视为基本列表。
后一种.append()
技术安全吗?它是否有效,尤其是在 QuerySet 相当大的情况下?还是有其他首选方法?或者,随时告诉我我很傻,Q 对象方法没有任何问题!
非常感谢。