【发布时间】:2016-06-16 01:42:42
【问题描述】:
我有一张名为Orders 的表,每个订单都有一个状态,我想根据状态计算结果:
status_counts = Order.objects.all( ).values( 'status' ).annotate(
pending = Count( Case(
When( status__exact = Order.STATUS_PENDING, then = F( 'pk' ) )
) ),
completed = Count( Case(
When( status__exact = Order.STATUS_COMPLETED, then = F( 'pk' ) )
) ),
failed = Count( Case(
When( status__exact = Order.STATUS_FAILED, then = F( 'pk' ) )
) ),
reversed = Count( Case(
When( status__exact = Order.STATUS_REVERSED, then = F( 'pk' ) )
) ) )
我的查询的问题是它为每个状态返回一个结果:
[{'completed': 4571, 'pending': 0, 'failed': 0, 'reversed': 0, 'status': 0}, {'completed': 0, 'pending': 2278, 'failed': 0, 'reversed': 0, 'status': 1}, {'completed': 0, 'pending': 0, 'failed': 0, 'reversed': 353, 'status': 3}]
有没有办法可以得到这个结果:
{'completed': 4571, 'pending': 2278, 'failed': 0, 'reversed': 353, 'status': 0}
【问题讨论】:
-
除非在大量请求中使用它,否则我绝对建议在一系列不同的
count查询中执行此操作。它效率不高,但更容易推理,无论谁维护或什至接下来阅读它 - 即使是你,一个月后 - 肯定能够更容易地解释它。
标签: django django-models django-orm