【问题标题】:How to get datetime_difference with django queryset?如何使用 django 查询集获取 datetime_difference?
【发布时间】:2017-11-10 06:55:20
【问题描述】:

我有 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)

我还有一个查询集,它返回我所有的商店以及每个商店的订单数:

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 查询集或本机 sql 查询,用于执行以下操作:

对于'MyTestStore 1',有500 订单,每个订单都有 datetime_begin 和 datetime_end。 对于每个500 订单,我想计算差异:diff = datetime_end - datetime_begin。 结果我会得到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'}

有没有办法做到这一点?谢谢。

【问题讨论】:

    标签: python sql django orm


    【解决方案1】:

    如果这为您提供了正确的结果(结果可能采用不同的格式),请勾选此项

    顺便说一句,我不确定:)

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 2018-05-30
      • 2021-12-10
      • 2022-01-26
      • 2012-03-02
      • 1970-01-01
      • 2011-06-26
      相关资源
      最近更新 更多