테마에 대한 리뷰 중에 가장 좋아요를 많이 받은 리뷰를 렌더하고 싶다.
from django.db.models import Max
review = ThemeRev.objects.filter(theme_ID=theme_pk)
topreview = review.aggregate(Max('themeRevRecom'))
html에서 확인해 봤더니 안뜬다.
혹시 몰라 {{topreview}}로 확인해 보니
{'themeRevRecom__max': 3}
이런식으로 계산한 max 값 하나에 대한 정보만 뜬다.. 원한 건 이게 아님
model instance값을 다 불러오고 싶을 때 가장 좋은 방법은
def detail_theme(request, theme_pk):
theme = Theme.objects.get(pk=theme_pk)
review = ThemeRev.objects.filter(theme_ID=theme_pk)
topreview = review.order_by('-themeRevRecom')[0]
# topreview = review.aggregate(Max('themeRevRecom')) / X
# like = Like.objects.filter(article__in=review) / X
return render(request, 'detail_theme.html', {'theme':theme, 'review':review, 'topreview':topreview})
이런식으로 order_by를 이용해 정렬 후 가장 첫번째 인덱스를 가져오는 것이다.
다만 쿼리셋이 비어있을 때 error 뜨는 걸 방지하기 위해서
topreview = review.order_by('-themeRevRecom').first()
이렇게 사용해서 None을 리턴 시키는 것이 베스트
++
가장 최근 작성한 데이터를 가져오고 싶을 때는
review = ThemeRev.objects.filter(theme_ID=theme_pk).last()
참조 사이트
https://stackoverflow.com/questions/844591/how-to-do-select-max-in-django