2016-05-05 24 views
0

PATCH要求用に複数のエンドポイントを作成したいと思います。DRF - PATCH要求用に複数のエンドポイントを作成する

たとえば、

class CityViewSet(viewsets.ModelViewSet): 
    """ 
    API endpoint that allows city to be viewed or edited. 
    """ 
    authentication_classes = (TokenAuthentication,) 
    permission_classes =() 
    queryset = City.objects.filter(active=True) 
    serializer_class = CitySerializer 

class CitySerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = City 
     fields = ('id', 'name', 'is_metro', 'is_village', 'active') 

    def update(self, instance, validated_data): 
     for attr, value in validated_data.items(): 
      if not isinstance(value, (list,dict)): 
       setattr(instance, attr, value) 

     instance.save() 
     return instance 

urls.py

router = routers.DefaultRouter() 
router.register(r'city', CityViewSet) 

は、私は最終的にのみ、このビューセットのPATCHリクエストに行く複数のルータを作成できますか?更新メソッドでは、URLに基​​づいて、私は何をすべきかを決定します。

答えて

0

のように、同じビューセットのURLの異なるあなたを登録することができます:あなたが閲覧可能なAPIを使用していて、DRFは逆のURLを作成している場合、あなたはおそらく例では(そこに最初のものを取得します

router = routers.DefaultRouter() 
router.register(r'city', CityViewSet) 
router.register(r'town', CityViewSet.as_view({'patch':'partial_update'}) 

2番目のリンクでPATCHのみを使用する場合は、.as_view({'patch': 'partial_update'})を実行すると、MethodNotAllowedがスローされるため、他のメソッドで到達できなくなります。あなたが他の方法でそれに到達しようとするならば。

+0

私はそこにbase_nameを追加することができます。しかし、私がすれば、すべてのメソッドがそこにあり、私はパッチメソッドが欲しいだけです。また、私は/ view_nameのupdateメソッドでbase_nameの接頭辞を取得したいと思います。あなたはこのように、次に行うことができます – Anuj

+0

: ルータ= routers.DefaultRouter() router.register(r'city 'CityViewSet) router.register(r'town'、CityViewSet.as_view({ 'パッチ': 'partial_updateを'}))。回答を更新します –

+0

私のビューでURLにアクセスするにはどうすればいいですか? – Anuj

関連する問題