【问题标题】:how to group records by hour and return instances如何按小时对记录进行分组并返回实例
【发布时间】:2019-10-06 13:07:03
【问题描述】:

这是我的模型,我正在使用 postgresql:

class TripRequest(models.Model):
    passenger = models.ForeignKey('user.Passenger', on_delete=models.DO_NOTHING)
    beginning_point = models.PointField()
    destination_point = models.PointField()
    trip_beginning_time = models.DateTimeField()
    ...

我对高级 orm 查询不是很熟悉 我想将具有最近(例如在特定小时内)开始时间的旅行请求分组,然后过滤它,例如最近的起点或最近的司机。

现在有关于 SO 的答案将查询分组并返回所有组项的计数或其他信息,但我只想按小时对实例进行分组,并拥有一组实例以进一步过滤我该怎么做?

【问题讨论】:

    标签: django postgresql django-orm


    【解决方案1】:

    可以使用django的Trunc数据库函数:

    from django.db.models.functions import Trunc
    
    def get_dt_stats(model):
        current_date = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0)
        proxy = model.objects.filter(trip_beginning_time__gte=current_date) # Or any filter you need
        proxy = proxy.values(x=Trunc('trip_beginning_time', 'hour', tzinfo=tzlocal.get_localzone()))
        proxy = proxy.annotate(amount=Count('id'))
        return {k['x'].strftime('%Y-%m-%d %H:00'): k['amount'] for k in list(proxy)}
    

    该函数返回一个字典,其中包含按trip_beginning_time 小时分组的模型对象计数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-19
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多