본문 바로가기
내일배움캠프

83. 내일배움캠프 - 66일차 TIL

by 새싹_v 2022. 12. 5.
728x90


 

TIL

 

📌
오늘 한 일

최종 프로젝트

 

오늘도 하루 종일 프로젝트를 했다.

리뷰 삭제, 리뷰 crud swagger 추가, 장소 리뷰 리스트 조회 최신순, 좋아요 카운트 순 추가,

리뷰 전체 조회 최신순 좋아요 카운트 순 추가 이 기능들을 추가하고 끝이 났다.

제일 힘들었던 부분이 좋아요카운트순으로 출력하는 부분이었다.

이 부분은 팀원과 5시부터 10시까지 한 거 같음 ㅎㅎ

구글링 하면서 여러 가지 방법을 사용해 봤는데 좋아요 카운트 순으로 출력이 되지 않아서 

고민 끝에 튜터님께 질문하러 갔다.

튜터님께서 Count()를 사용해서 해보라고 하셨다. 이 방법도 해봤는데 안됐었는데

튜터님께서 자료를 주시면서 따라 해 보라고 하셨다. 주신 자료로 해보니 정상작동...

흠... 왜 내가 할 땐 안됐을까 구글링 하는 방법이 차원이 다르구나...라는 생각을 했음

튜터님 덕분에 기능이 잘 구현돼서 깃 푸시하고 오늘 할 일 끝.

 

 

study

json파일 db에 로드하는 방법

python manage.py loaddata 'json파일 경로'

 

 

좋아요 cnt 정렬

#models.py

review_like = models.ManyToManyField(User, verbose_name='후기 좋아요', related_name="like_review", blank=True)
#urls.py

path('review_rank/',views.ReviewRankView.as_view(), name='reveiw_rank_view'),
#views.py
from django.db.models import Count

def get(self, request, place_id):

like_count_review = Review.objects.filter(place_id=place_id).annotate(num_likes=Count('review_like')).order_by('-num_likes','-created_at')
#annotate() 사용해서 review_like를 참조한 새로운 num_likes 필드를 생성, 
#Count()를 사용해서 review_like 데이터 개수를 세줌
#order_by로 개수를 내림차순으로 정렬해주고, 같은 개수가 있을 시 생성시간 내림차순으로 정렬을 한번 더 해줌

like_count_review_serializer = ReviewListSerializer(like_count_review, many=True).data

review = {
            "like_count_review": like_count_review_serializer,
}
return Response(review, status=status.HTTP_200_OK)
annotate를 사용해서 새로운 요소를 데이터쿼리에 추가해주고
Count()를 사용해서 요소 데이터가 몇 개 있는지 확인해줌

annotate() 사용 이유 : ex) 책 목록을 검색하는 경우 각 책에 기여한 저자 수를 알고 싶을 경우
여기선 review_like를 통해서 like count를 알고 싶기 때문에 사용

어려우면 아래 링크를 한번 참고해보자❗
https://docs.djangoproject.com/en/4.1/topics/db/aggregation/
728x90

댓글