Django:注释后合并查询集的问题
我有一个“对话”管理器,如下所示:
class AnnotationManager(models.Manager):
def get_query_set(self):
return super(AnnotationManager, self).get_query_set().annotate(
num_votes=Count('vote', distinct=True),
num_comments=Count('comment', distinct=True),
num_commentators = Count('comment__user', distinct=True),
)
投票和评论有一个对话的外键。评论有一个用户的外键。当我这样做时:
dialogs_queryset = Dialog.public.filter(organization=organization)
dialogs_popularity = dialogs_queryset.exclude(num_comments=0) | dialogs_queryset.exclude(num_votes=0)
...dialogs_popularity 永远不会返回组合,而只会返回评论数超过 0 的对话框,或者如果我更改 OR 的顺序,则返回投票数超过 0 的对话框!
对我来说,预期的行为是获得超过 0 票的对话框和超过 0 条评论的对话框。
我缺少什么?或者这里的注释行为是否存在错误?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
想要进行投票和评论的对话吗?
或者有投票、评论或两者兼而有之的对话。 (你想要什么基于评论。)
我添加了 Q 对象 示例,因为“|”在您的代码示例中似乎暗示了它们,它们使创建 ORed 查询变得更容易。
编辑:
我添加了
has_comments
和has_votes
以使内容更容易阅读。Did want dialogs with both votes and comments?
Or dialogs having either votes, comments or both. (What you want based on comment.)
I added the Q objects examples because the "|" in your code sample seemed to be hinting at them and they make it easier to create ORed queries.
EDIT:
I added
has_comments
andhas_votes
to make things a little easier to read.