我是个新手。
我在我的django后端得到以下错误:
不支持在union()之后调用QuerySet.only()
产生错误的代码如下:
post_notification_target_users = Post.get_post_comment_notification_target_users(post=post,
post_commenter=post_commenter).only(
'id', 'username', 'notifications_settings__post_comment_notifications')
我搜索了上面使用.union()的地方,这是我发现的:
def get_post_comment_notification_target_users(cls, post, post_commenter):
"""
Returns the users that should be notified of a post comment.
This includes the post creator and other post commenters
:return:
"""
# Add other post commenters, exclude replies to comments, the post commenter
other_commenters = User.objects.filter(
Q(posts_comments__post_id=post.pk, posts_comments__parent_comment_id=None, ) & ~Q(
id=post_commenter.pk))
post_creator = User.objects.filter(pk=post.creator_id)
return other_commenters.union(post_creator)
我读了其他堆栈帖子,在使用union()后什么是允许的,什么是不允许的,但我无法找到正确的方法来做。
1条答案
按热度按时间c0vxltue1#
最简单的方法是在调用union()之前使用only()调用
因为你是在相同的对象类型(用户)上过滤,你也可以扩展你的初始查询,使用括号来指示优先级,并完全避免union()。
注意:如果你确定post_creator不会出现在other_commenters中,你也可以完全避免使用OR操作符union()。