django - 在带注释的 QuerySet 上使用 Q 对象进行过滤

标签 django django-queryset django-q

模拟测试用例:

def testCount(self):
    qs = Test.objects.all()
    qs = qs.annotate(a_count=Count('a_items'), b_count=Count('b_items'))
    for item in qs:
        print 'a_count: %d, b_count: %d' % (item.a_count, item.b_count)
    qs1 = qs.filter(Q(a_count__gt=0))
    self.assertEquals(qs1.count(), 1)
    qs2 = qs.filter(Q(a_count__gt=0) | Q(b_count__gt=0))
    self.assertEquals(qs2.count(), 1)

输出:
a_count: 1, b_count: 0
a_count: 0, b_count: 0
...
FAIL: testCount 
    self.assertEquals(qs2.count(), 1)
AssertionError: 0 != 1

为什么|运算符(operator)改变这样的行为,我该如何解决?

最佳答案

看起来这还是一个 open issue从 v1.2.4 开始。

我猜您已经测试了 bug report 中提供的补丁之一。或求助于 raw queries直到正式修复。

关于django - 在带注释的 QuerySet 上使用 Q 对象进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536535/

相关文章:

django - 尝试在 django 模型中设置 BooleanField 值时出现奇怪的问题

python - Django q 更新一个已经安排好的任务

Django get_next_by_FIELD 使用复杂的 Q 查找

django - 测试 Django 管理操作(重定向/身份验证问题)

javascript - 如何在 Django 模板中使用 Django 列表作为 javascript 变量?

python - Django Count和Sum批注相互干扰

django - 一个混合使用 filter() 和 Q 对象的 Django ORM 查询

python - 根据 ModelChoiceField 获取 ModelMultipleChoiceField 字段的查询集

python - Django 是在服务器上还是在浏览器中执行脚本?

python - Django 获取查询集中的范围