【发布时间】:2019-09-23 13:05:31
【问题描述】:
qs = ...
qs = qs.annotate(v=Count('a', filter=Q(a__lt=5)))
a = qs.first().v
b = qs.filter(Q(a__lt=5)).count()
assert a == b # error
这些方法会产生不同的结果有什么原因吗?
【问题讨论】:
-
您在第一个
qs中聚合,而不是注释。 -
什么是字段 'a',一个 FK?
-
它只是模型中的一些非零字段
-
那你的第一个注解意义不大,注解总是1。对每一行进行注解。
-
@WillemVanOnsem 我的理由是注释将使聚合计数整个 qs 并将结果添加到 qs 内的每个对象。而
v的值不应该和filter().count()不同,但由于某种原因它是不同的。
标签: python django django-orm