繁体   English   中英

如何使用Django queryset获取datetime_difference?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM