포스트

[Recipe: Remake] 레시피 후기 등록, 수정, 삭제

models.py

이름설명
recipe레시피
user작성자
content내용
created_at작성시간
updated_at수정시간

serializers.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class RecipeReviewSerializer(ModelSerializer):
    class Meta:
        model = RecipeReview
        fields = ('content',)


    def create(self, validated_data):
        # 레시피를 못찾으면 404 오류
        # 레시피의 기본키는 request 경로에서 찾았다
        recipe = get_object_or_404(
            Recipe,
            pk=self.context.get('request').path.split('/')[2]
        )
        user = self.context.get('request').user
        review = RecipeReview.objects.create(
            recipe=recipe,
            user=user,
            content=validated_data.get('content')
        )

        return review

views.py

ModelViewSet을 상속받아 작성했다.

1
2
3
4
5
6
7
8
9
class RecipeReviewViewSet(ModelViewSet):
    serializer_class = RecipeReviewSerializer
    queryset = RecipeReview.objects.all()


    def get_queryset(self):
        # 레시피를 못찾으면 404 오류
        recipe = get_object_or_404(Recipe, pk=self.kwargs.get('recipe_pk'))
        return super().get_queryset().filter(recipe=recipe)

urls.py

DefaultRouter를 사용했다. 스택 오버플로우를 참고했다.

1
2
3
4
5
6
router = DefaultRouter()
router.register(r'', RecipeViewSet)
router.register(r'(?P<recipe_pk>\d+)/reviews', RecipeReviewViewSet)
urlpatterns = [
    path('', include(router.urls)),
]
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.