<aside> 💡 1. 최근에 개봉한 영화 (1달 이내, 인기도 순서) 2. 요즘 제일 관심 받는 영화 (1달 이내 좋아요, 리뷰 수가 가장 많은 영화) 3. 계절 추천 영화

</aside>

1. 최근에 개봉한 영화

# 영화 추천1. 최근에 개봉한 영화 
# 최근 50일 이내 인기도순으로 정렬
now = timezone.now()
movies = Movie.objects.annotate(review_count=Count('review', distinct=True, filter = Q(review__created_at__range=[now-timedelta(days=30), now]))).order_by('-review_count')
serializer = MovieListSerializer(movies, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)

출력되는 영화의 수가 적어서, 최근 50일로 기간을 늘렸다.

2. 요즘 제일 관심받는 영화 (1달 이내 작성된 리뷰 수가 가장 많은 영화)

# 영화 추천2. 요즘 제일 관심받는 영화 (최근 30일 이내 리뷰 수가 많은 영화)
now = timezone.now()
movies = Movie.objects.annotate(
    review_count=Count(
        'review', distinct=True, filter = Q(
            review__created_at__range=[now-timedelta(days=30), now]
            ))).order_by('-review_count')[:21]
serializer = MovieListSerializer(movies, many=True)
return Response(serializer.data)

충격!!!! __를 활용하면 역참조 모델의 다른 필드에 접근할 수 있다.

즉, 30일이내에 작성한 review의 수가 완성된다!

3. 계절 추천 영화

# 영화 추천3. 계절 추천 영화
# 봄: 로맨스, 여름: 공포, 가을:모험 , 겨울: 판타지
# 인기 99 이상 랜덤(20개 데이터 뽑기)
  now = int(timezone.now().strftime('%m'))
  if now == 3 or now == 4 or now == 5:
      season = 'spring'
  elif now == 6 or now == 7 or now == 8:
      season = 'summer'
  elif now == 9 or now == 10 or now == 12:
      season = 'fall'
  else:
      season = 'winter'
  season_code = {
      'spring': 10749, 'summer': 27, 'fall': 12, 'winter': 14
  }
  genre_id = season_code.get(season)
  movies = Movie.objects.filter(genre_ids=genre_id, popularity__gt=99).order_by('?')[:21]
  serializer = MovieListSerializer(movies, many=True)
  return Response(serializer.data)