簡體   English   中英

獲取按天分組的最后幾天創建的對象列表

[英]Get a list of object created for the last days grouped by day

我需要獲取按天分組的最近幾天創建的對象列表,以便在圖表中顯示數據。

我有這個模型:

class Model(Base):
    ...
    created = DateTimeField(default=timezone.now(), editable=False)
    ...

現在,我這樣做:

Model.objects.filter(
    created__date__lte=today,
    created__date__gte=today-delta
).values('created').annotate(count=Count('id'))

但是,我得到以下查詢集:

<SoftDeletableQuerySet [{'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 208157, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 297617, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 385555, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 474287, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 507464, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 552092, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 585314, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 618656, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 652501, tzinfo=<UTC>), 'count': 1}, {'created': datetime.datetime(2018, 10, 15, 13, 5, 35, 696849, tzinfo=<UTC>), 'count': 1}]>

如您所見,對象是按創建日期分組的,但是此字段是DateTimeField ,而不是DateField ,因此按毫秒分組。

我正在嘗試這樣做:

Model.objects.filter(
    created__date__lte=today,
    created__date__gte=today-delta
).values('created__date').annotate(count=Count('id'))

但是我收到以下錯誤:

FieldError: Cannot resolve keyword 'date' into field. Join on 'created' not permitted.

我認為我需要的是很普通的,並且必須有某種DRY方式來做到這一點。

您可以將.annotate(..)TruncDate [Django-doc]表達式一起使用以截斷日期:

from django.db.models.functions import TruncDate

Model.objects.filter(
    created__date__lte=today,
    created__date__gte=today-delta
).annotate(
    day=TruncDate('created')
).values('day').annotate(
    count=Count('id')
).order_by('day')

.order_by是必需的,因為否則您不會“強制” Django使用GROUP BY ,因此Count('id')將不包含該特定日期的項目總數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM