학습한 내용
Validation
- https://www.django-rest-framework.org/api-guide/serializers/#validation
- Serializer의 validate() 메소드 작성
- validate() 메소드를 통해 검증된 데이터가 create(), update() 메소드의 validated_data로 전달된다.
Annotate Field
- annotate(): 파생변수 추가할 때 사용
- Aggregation Function
- 종류: Avg, Count, Max, Min, Sum 등
- 하나의 값을 반환
- Coalesce: aggregate가 None을 반환하는 것을 방지
- Subquery
- SQL의 중첩 질의문과 같음
- OuterRef: 바깥 모델에 접근할 때 사용
- https://show-me-the-money.tistory.com/entry/Django-ORM%EC%97%90%EC%84%9C-Subquery-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
from rest_framework import generics
from django.db.models import Subquery, OuterRef, Avg, Count
from django.db.models.functions import Coalesce
from app.movie.models import Movie
from app.review.models import Review
class MovieListCreateView(generics.ListCreateAPIView):
avg_rating_subquery = Review.objects.filter(movie=OuterRef('id')).values('movie').annotate(avg = Avg('rating')).values('avg')
queryset = Movie.objects.annotate(
avg_rating = Coalesce(Subquery(avg_rating_subquery), 0.0)
)
'인코스런 2기' 카테고리의 다른 글
커머스 프로젝트 4주차 WIL (0) | 2022.07.10 |
---|---|
커머스 프로젝트 3주차 WIL (0) | 2022.07.03 |
Day4 - 장고 온보딩 프로젝트 4 (0) | 2022.06.10 |
Day2 - 장고 온보딩 프로젝트 2 (0) | 2022.06.09 |
Day 1 - OT & 장고 온보딩 프로젝트 1 (0) | 2022.06.07 |