如何使用Django ORM通过DateTimeField()计算Postgresql数据库中的项目

时间:2016-07-13 18:57:28

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

我们有一个带有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

3 个答案:

答案 0 :(得分:3)

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'))

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分: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