[英]How to get datetime_difference with django queryset?
我有3种型号:
class Store(models.Model):
title = models.CharField(u'Store_Title', max_length=100)
class OrderExtra(models.Model):
order = models.OneToOneField(Order, verbose_name=u'Order')
store = models.ForeignKey(Store)
class Order(models.Model):
code = models.IntegerField(u'Order_Code')
datetime_begin = models.DateTimeField(null=True)
datetime_end = models.DateTimeField(null=True)
我还有一个queryset,它返回我所有的商店以及每个商店的订单数:
qs = Order.objects.values('orderextra__store__title').annotate(orders_count=Count('code'))
结果,我得到:
qs[0] = {'orders_count': 500, 'orderextra__store__title': u'MyTestStore 1'}
qs[1] = {'orders_count': 200, 'orderextra__store__title': u'MyTestStore 2'}
我想要的是执行以下操作的orm queryset或本机sql查询:
对于'MyTestStore 1'
,有500
订单,每个订单都有datetime_begin和datetime_end。 对于这500
订单中的每个订单,我要计算差异: diff = datetime_end - datetime_begin
。 结果,我将得到500
差异。 下一步是计算: diff1 + diff2 + diff3 + diff500 / 500
(从所有diff diff1 + diff2 + diff3 + diff500 / 500
平均值)。 作为查询集的最终结果,我想得到:
qs[0] = {'orders_average_diff': 7.3 (minutes), 'orderextra__store__title': u'MyTestStore 1'}
qs[1] = {'orders_average_diff': 4.2 (minutes), 'orderextra__store__title': u'MyTestStore 2'}
有没有办法做到这一点? 谢谢。
为您提供正确的结果(结果可能采用不同的格式),请检查此项目
我不确定btw :)
z = {}
q1 = OrderExtra.objects.all()
for q in q1:
# Get time difference in minutes for this order
diff = q.order.datetime_end - q.order.datetime_begin
diffm = diff.seconds / 60
#check if store is already updated to z
check = z.get(q.store.title, 'error')
# if NOT add storeName as key and c= Counter, a = Avg date-time diff
if check == 'error':
z.update({q.store.title:{'c':1, 'd':diffm, 'a': diffm}})
# If Available calculate avg with counter and total diff
else:
avgm = (( diffm + z[q.store.title]['d'] ) // (z[q.store.title]['c'] + 1))
z[q.store.title]['a'] = avgm
z[q.store.title]['d'] = diffm + z[q.store.title]['d']
z[q.store.title]['c'] = z[q.store.title]['c'] + 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.