장소에 대한 리뷰의 좋아요가 많은 순으로 정렬하기
#좋아요순
like_count_review = Review.objects.filter(place_id=place_id).annotate(num_likes=Count('review_like')).order_by('-num_likes','-created_at')
recent_review_serializer = ReviewListSerializer(recent_review, many=True).data
like_count_review_serializer = ReviewListSerializer(like_count_review, many=True).data
review = {
"recent_review": recent_review_serializer,
"like_count_review": like_count_review_serializer
}
return Response(review, status=status.HTTP_200_OK)
.annotate(num_likes=Count('review_like')).order_by('-num_likes','-created_at')
-> review_like를 Count 함수를 이용해 개수를 세워 '-num_likes'(좋아요가 많은 순)으로 정렬하고 개수가 동일할 시 '-created_at'(리뷰 작성 날짜 최신순)으로 정렬한다.
추가로 알아두기
ORM 쿼리 최적화 (select_related, annotate, aggregates)
참고
annotate aggregate
예...