반응형
질문
나는 모델을 쿼리합니다:
Members.objects.all()
그리고 다음과 같이 반환됩니다:
Eric, Salesman, X-Shop
Freddie, Manager, X2-Shop
Teddy, Salesman, X2-Shop
Sean, Manager, X2-Shop
내가 원하는 것은 데이터베이스로 group_by
쿼리를 실행하는 최상의 Django 방법을 알고 싶습니다:
Members.objects.all().group_by('designation')
물론 작동하지 않습니다.
django/db/models/query.py
에서 어떤 트릭을 사용할 수 있다는 것은 알고 있지만, 패치 없이 어떻게 할 수 있는지 궁금합니다.
답변
만약 집계를 하려면 ORM의 집계 기능을 사용할 수 있습니다:
from django.db.models import Count
result = (Members.objects
.values('designation')
.annotate(dcount=Count('designation'))
.order_by()
)
이는 다음과 유사한 쿼리 결과를 가져옵니다:
SELECT designation, COUNT(designation) AS dcount
FROM members GROUP BY designation
그리고 결과는 다음과 같은 형태일 것입니다:
[{'designation': 'Salesman', 'dcount': 2},
{'designation': 'Manager', 'dcount': 2}]
order_by()
를 포함하지 않으면 기본 정렬이 예상한 것과 다를 수 있으므로 잘못된 결과를 얻을 수 있습니다.
결과에 여러 필드를 포함하려면 values
에 인수로 추가하면 됩니다. 예를 들어:
.values('designation', 'first_name', 'last_name')
참고 자료:
- Django 문서:
values()
,annotate()
, 그리고Count
- Django 문서: 집계, 특히 기본 정렬 또는
order_by()
와의 상호작용 섹션
반응형
댓글