2017-11-01 1 views
0

여러 조리법이있는 Cookbook 클래스와 비슷한 설정이 있습니다. Django REST 관련 모델의 일반보기

은 내가

class CookbookListCreateView(ListCreateAPIView): 
    permission_classes = (IsAuthenticated,) 
    queryset = Cookbook.objects.all() 
    serializer_class = CookbookSerializer 

가이는 요리 책 목록 생성/처리합니다.

는 내가 레시피 모델의 ListCreateView 필요하지만 목록은이 URL 방식으로, 특정 요리 책에 속해야합니다 :

/cookbook/2/recipes

가의 PK와 요리 책에있는 레시피 만 반환 2.

ListCreateAPIView을 어떻게 수정하면이 문제를 해결할 수 있습니까?

답변

0

당신은 새로운 경로/URL을 생성 할 수 있습니다

class RecipeListCreateView(ListCreateAPIView): 
    permission_classes = (IsAuthenticated,) 
    queryset = Recipe.objects.all() 
    serializer_class = RecipeSerializer 

    def get_cookbook(self): 
     queryset = Cookbook.objects.all() 
     return get_object_or_404(queryset, pk=self.kwargs['cookbook_pk']) 

    def get_queryset(self): 
     cookbook = self.get_cookbook() 
     return super().get_queryset().filter(cookbook=cookbook) 

    def perform_create(self, serializer): 
     cookbook = self.get_cookbook() 
     serializer.save(cookbook=cookbook) 

사용 get_cookbook을 당신이 요리 책을 필요할 때마다 (예를 들어 perform_create 방법으로 위.)

0

이것이 DRF에서 "세부 경로"라고 불리는 것입니다. 그것은 DRF-extensionsnested route 기능을 사용하여 간단한 경우에 그러나 더 복잡한보기에 충분합니다

class CookbookListCreateView(ListCreateAPIView): 
    .... 

    @detail_route(methods=['get']) 
    def recipes(self, request, **kwargs): 
     # Do what you would do in a function-based view here 

더 나은 솔루션입니다. 당신이 원하는대로 /cookbook/<cookbook_pk>/recipes

그리고 API를보기 :

관련 문제