注释后的Django过滤器

时间:2011-01-03 12:40:06

标签: django filter

  

可能重复:
  Filtering with a Q object on an annotated QuerySet

我遇到了一种奇怪的行为,只是想知道它是一个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,因此结果总是为空。

任何人都可以向我解释这种行为并指出解决方案,如果它不是一个错误吗?

感谢。

0 个答案:

没有答案