如何通过 DateTimeField() 使用 Django ORM 计算 Postgresql 数据库中的项目
How to count items in Postgresql-database with Django ORM by DateTimeField()
我们有一个带有 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
试试:
MyModel.objects.values('my_date__date', 'my_date__hour').annotate(Count('id'))
Django 1.10 引入了新的数据库功能(Extract and Trunc):
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'))
所以,在 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()
按小时分组
我们有一个带有 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
试试:
MyModel.objects.values('my_date__date', 'my_date__hour').annotate(Count('id'))
Django 1.10 引入了新的数据库功能(Extract and Trunc):
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'))
所以,在 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()