사용자가 리뷰를 작성할 때:
app_id
를 통해 Game
모델과 매핑하여 관련 데이터를 활용해야 함.categories
필드를 Game
모델의 genres
로 자동 설정.Game
모델의 name
과 header_image
를 포함.app_id
를 통해 Game
모델을 찾는 로직ReviewSerializer
에서 game
(ForeignKey)을 사용하려 했지만, Game
모델의 기본 키(ID) 대신 appID
를 입력받아야 하는 요구사항과 맞지 않음.
app_id = serializer.validated_data.get('app_id')
game = Game.objects.filter(appID=app_id).first()
if not game:
return Response({"app_id": "유효하지 않은 app_id 입니다."}, status=status.HTTP_400_BAD_REQUEST)
Game
모델의 appID
를 활용하여 객체를 검색하도록 구현.filter(...).first()
를 사용해 객체가 없을 때도 안전하게 처리.Game.objects.get(appID=app_id)
를 사용해 명확히 예외 처리 가능.categories
필드 값 설정사용자에게 categories
를 입력받도록 요구했으나, 이는 불필요한 중복 데이터 입력을 유발.
review.categories = game.genres # Game의 genres를 categories로 설정
review.save()
Game
모델의 genres
를 자동으로 categories
에 저장하도록 설정.ReviewSerializer
에 game_name
과 header_image
를 동적으로 추가하려 했으나, 직렬화 로직과 응답 데이터를 불필요하게 복잡하게 만듦.
response_data = serializer.data.copy()
response_data['game_name'] = game.name
response_data['header_image'] = game.header_image
serializer.data
를 기반으로 game_name
과 header_image
를 동적으로 추가.app_id
처리filter(...).first()
에서 객체가 없을 경우 예외가 아닌 None을 반환.
if not game:
return Response({"app_id": "유효하지 않은 app_id 입니다."}, status=status.HTTP_400_BAD_REQUEST)
try
-except
구문으로 get
을 사용하여 더욱 엄격한 에러 핸들링 가능.def post(self, request):
"""새 리뷰 생성"""
serializer = ReviewSerializer(data=request.data)
if serializer.is_valid():
# app_id로 Game 객체 찾기
app_id = serializer.validated_data.get('app_id')
game = Game.objects.filter(appID=app_id).first()
if not game:
return Response({"app_id": "유효하지 않은 app_id 입니다."}, status=status.HTTP_400_BAD_REQUEST)
# 리뷰 생성
review = serializer.save()
# Game의 genres를 categories로 저장
review.categories = game.genres
review.save()
# 응답용 데이터 생성
response_data = serializer.data.copy()
response_data['game_name'] = game.name
response_data['header_image'] = game.header_image
return Response(response_data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
app_id
로 Game
모델을 찾는 방식은 유효성 검사와 오류 처리가 간결하고 명확해야 한다.categories
는 클라이언트 입력 없이 Game
의 genres
로 자동 설정하여 중복 입력을 방지.