我遇到了一种奇怪的行为,只是想知道它是一个bug还是一个功能。 我的任务是按用户对操作列表进行分组,计算值和,并按绝对值过滤它们。 E.g。
user1 5
user1 10
user2 2
user3 -12
和limit = 10,我想看
user1 15
user3 -12
以下是我的代码片段:
Actions.objects.values("context_user").annotate(points = Sum("value")) \
.filter(Q(points__gt = limit) | Q(points__lt = -limit))
注意在过滤器中使用OR。但令我惊讶的是,SQL查询看起来像:
... GROUP BY "action"."context_user_id" HAVING (SUM("action"."value") > 0 AND SUM("action"."value")
Django以某种方式使用AND而不是OR,因此结果总是为空。
任何人都可以向我解释这种行为并指出解决方案,如果它不是一个错误吗?
感谢。