我有一个名为Order
的模型,其中包含timestamp_delivered
(日期时间字段)。模型订单具有与之关联的驱动程序。我想知道每个司机发出订单的天数。
我正在尝试以下查询:
Order.objects.annotate(
date=Cast('timestamp_delivered'), DateField()
).values(
'driver_id'
).annotate(
days=Count('date')
)
但得到了错误:
KeyError:date
我也尝试过运行以下命令:
Order.objects.values(
'driver_id'
).annotate(
date=Cast('timestamp_delivered'), DateField()
).annotate(
days=Count('date')
).values_list(
'driver_id', 'days'
)
获得输出
[(Driver1, 1), (Driver2, 1), (Driver2, 1)... ]
然而,我期待的输出是这样的:
[(Driver1, 2), (Driver2, 4), (Driver3, 8)... ]
答案 0 :(得分:0)
使用values
会导致其前面的注释丢失,从而导致您的密钥错误。如果你继续使用第二个解决方案,你将遇到类似的问题。
诀窍是对修改后的列进行计数。 TruncDate
函数有助于解决这个问题:
from django.db.models.functions import TruncDate
DeliveryOrder.objects.
values('driverid').
annotate(deliverydays=Count(TruncDate('timestamp_delivered'), distinct=True))
在Django shell中验证