DRF - 为PATCH请求创建多个端点

时间:2016-05-05 07:47:47

标签: python django django-rest-framework

我想为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,我将决定该怎么做。

1 个答案:

答案 0 :(得分:0)

您可以为同一个视图集注册不同的网址,例如:

Input: { A1, A2, B3, D4, C7, B12, A12, C14, D15, C22, A23, B25, A35, A36, D37 }

如果您正在使用可浏览的API并且DRF正在创建反向网址,那么您可能会获得第一个(在上面的示例中使用'city')

如果你只想要PATCH和第二个链接,那么执行.as_view({'patch':'partial_update'})将阻止使用其他方法到达它,因为如果你试图用它来触及它,它将抛出MethodNotAllowed任何其他方法。