레시피 정보를 보낼 때 그 레시피가 북마크된 수나, 별점의 평균값을 전달해주는데 튜터님이 Annotate와 Aggregate를 활용해보라고 추천하셨는데 까먹고 있다가 1차 피드백 받고 수정해봄
검색해보니 간단하게 말하면 기록된 항목의 집계를 구할 수 있도록 도와주는 장고 ORM중 하나인 것 같다.
집계를 위한 함수를 import하고 계산할 필드명을 적어주면 됨
오브젝트.
annotate
(집계함수('필드명'))
# 예시
StarRate.objects.all().aggregate(Avg('star_rate'))
User.objects.filter(is_admin=True).aggregate(Count('id'))
평균 별점 계산할 때 썼음.
Annotate는 가상의 새로운 필드를 하나 추가하는 개념인 것 같다.
사용법은 Aggregate와 비슷하지만 필드명을 지정해줘야 함.
오브젝트.
aggregate
(새로운 필드명 = 집계함수('필드명'))
# 예시
StarRate.objects.all().annotate(star = Sum('star_rate'))
recipes.annotate(bookmark_count=Count('recipe_bookmark')).order_by('-bookmark_count')
정렬옵션 중 북마크 많은 순으로 정렬할 때 사용했음.