【问题标题】:How to count items in Postgresql-database with Django ORM by DateTimeField()如何通过 DateTimeField() 使用 Django ORM 计算 Postgresql 数据库中的项目
【发布时间】:2016-11-16 12:17:33
【问题描述】:

我们有一个带有 Postgresql 数据库的 Django 应用程序。我们有一个包含DateTimeField() 的模型。

我们如何每天按小时计算项目?所以我们得到类似的东西:

July 2, 2016, 4 p.m. | 10
July 2, 2016, 5 p.m. | 12
...
July 3, 2016, 4 p.m. | 7
July 3, 2016, 5 p.m. | 11

# myapp/models.py

class MyModel(models.Model):
    my_date = models.DateTimeField()

# myapp/views.py

def object_count():
    query = MyModel.objects.how_to_count_items_by_hour_per_day

【问题讨论】:

  • 你用的是什么数据库?
  • 我正在使用 Postgresql。

标签: python django postgresql python-3.x django-queryset


【解决方案1】:

所以,在 Django 1.10 之前,这似乎是最好的方法:

jobs = MyModel.objects.filter(my_date__lte=datetime.now()).extra({"hour": "date_trunc('hour', my_date)"}).values(
        "hour").order_by('my_date').annotate(count=Count("id"))

上面的代码是根据下面链接的博客中给出的代码修改的,从DateTimeField()按小时分组

Django Aggregation: group by day

【讨论】:

    【解决方案2】:

    Django 1.10 引入了新的数据库函数(ExtractTrunc):

    from django.db.models import DateTimeField, Count
    from django.db.models.functions import Trunc
    
    MyModel.objects.annotate(
        day_hour=Trunc('my_date', 'hour', output_field=DateTimeField())
    ).values('day_hour').annotate(items=Count('id'))
    

    【讨论】:

      【解决方案3】:

      尝试:

      MyModel.objects.values('my_date__date', 'my_date__hour').annotate(Count('id'))
      

      【讨论】:

        猜你喜欢
        • 2020-06-21
        • 1970-01-01
        • 2011-04-23
        • 2014-07-23
        • 2017-12-09
        • 2021-10-04
        • 1970-01-01
        • 2021-01-01
        • 2011-04-17
        相关资源
        最近更新 更多