programing

장고 ORM, 요일별 그룹

telecom 2023. 11. 1. 22:08
반응형

장고 ORM, 요일별 그룹

DAY별로 제품을 그룹화하려고 하는데 date_created는 datetime 필드입니다.

Product.objects.values('date_created') \
               .annotate(available=Count('available_quantity'))

반환:

[
    {'date_created': datetime.datetime(2012, 4, 14, 13, 3, 6), 'available': 1},
    {'date_created': datetime.datetime(2012, 4, 14, 17, 12, 9), 'available': 1},
    ...
]

원하는:

[
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
]

편집: 데이터베이스 백엔드 MYSQL

이 질문에서 영감을 얻어 MySQL에서 사용해 보십시오.

from django.db.models import Count

Product.objects.extra(select={'day': 'date( date_created )'}).values('day') \
               .annotate(available=Count('date_created'))

San4ez의 답변과 유사한 접근 방식이지만, 반환 날짜는 'datetime.datetime(YYY, MM, DD)' 대신 'YYYY-MM-DD'로 변경됩니다.

Product.objects.extra(select={'day': "TO_CHAR(date_created, 'YYYY-MM-DD')"})
               .values('day') \
               .order_by('day') \
               .annotate(available=Count('date_created'))

장고 1.4에서는..dates('date_created', 'day')대신에.values().

다음 코드 조각을 시도해 보십시오.

Product.objects.annotate(available=Count('available_quantity')) \
  .dates('date_created', 'day')

다음을 반환해야 합니다.

[
    {'date_created': datetime.datetime(2012, 4, 14), 'available': 2}, ...
]

해봐도 좋습니다.

Product.objects.extra(select={'day': "TO_CHAR(date_created, 'YYYY-MM-DD')"})\
                .values('day')\
                .order_by('day')\
                .annotate(bets=Count('date_created'))

San4ez의 답변과 Zanon의 변화를 따름으로써

저는 Postgres 또는 Sqlite로 작업하기 위해 우회 방법을 만들어야 했습니다. Count() 함수는 datetime 필드를 고려하기 때문에 date_created가 시간 정보를 여전히 보유하고 있으므로 date_created가 시간 정보를 보유하고 있으므로 date와 함께 "day" 입력을 생성하더라도 상관이 없습니다.여러가지 시도 끝에 시간을 건너뛰는 방법에 도달했습니다.

장고 2.2

from django.db.models import Count

# Change date() to to_char(created_at, 'YYYY-MM-DD') if using Postgres
Product.objects.extra(select={'day': 'date( date_created )'})\
    .values('day') \
    .order_by('date_created__date')\
    .annotate(available=Count('date_created__date'))

언급URL : https://stackoverflow.com/questions/10154227/django-orm-group-by-day

반응형