Django ORM:注释中的计数和查询集上的计数有何不同?

2024-04-25 22:40:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

为什么这些方法会产生不同的结果?你知道吗


Tags: 方法ltcounterrorassertfilterfirstqs
1条回答
网友
1楼 · 发布于 2024-04-25 22:40:23

documentation关于Count(expression, **kwargs)

Returns the number of objects that are related through the provided expression

因此Count是专门用来计算相关对象(通过FK或M2M关系)的,对于行本身的任何其他列都没有太大意义。在这种情况下,它通常返回1(可能取决于您的db返回的值),因为总是有1个值。你知道吗

相关问题 更多 >