2016-07-27 1 views
0

デフォルトでDjango Rest Frameworkによって生成されるAPIエンドポイントのセットがあります。この例の例:DRFのルートに別の引数を追加

^api/^^provinces/(?P<pk>[^/.]+)/$ [name='province-detail'] 

は、http://127.0.0.1:8000/api/provinces/02/を生成します。私は例えば別のエンドポイントを持つことができるように、別のルートを追加したい

class ProvinceSerializer(serializers.ModelSerializer): 
    """ Serializer to represent the Province model """ 
    class Meta: 
     model = Province 
     fields = ("name", "code") 

^api/^^provinces/(?P<pk>[^/.]+)/(?P<product>[^/.]+)/$ [name='province-product-detail'] 

私はこのhttp://127.0.0.1:8000/api/provinces/02/apple/好きですし、アクセスできるように、それは怒鳴る実際のコードを使用しています シリアライザのメソッドの第2引数私はこのようにしようとしています:

class ProvinceSerializer(serializers.ModelSerializer): 
    """ Serializer to represent the Province model """ 
    class Meta: 
     model = Province 
     fields = ("name", "code") 

    @detail_route(methods=['post']) 
    def set_product(self, request, product=None): 
     return product 
+0

シリアライザがビューであることが重要だと思います。あなたはあなたの意見を投稿できますか? – jarussi

答えて

0

私は間違った場所で@detail_routeを使っていました。

class ProvinceDistrictViewSet(viewsets.ModelViewSet): 
    """ 
    API endpoint that allows users to view or edit province. 
    """ 
    queryset = Province.objects.all() 
    serializer_class = ProvinceDistrictsSerializer 

    # For get provinces 
    @detail_route(methods=['get'], url_path='(?P<product>\d+)') 
    def update_product(self, request, pk, product=None): 
     """ Updates the object identified by the pk and add the product """ 
     queryset = Province.objects.filter(pk=pk) 
     serializer = ProvinceDistrictsSerializer(queryset, many=True, context={'product': product}) 
     return Response(serializer.data, status=status.HTTP_200_OK) 
関連する問題