我尝试使用angular $ http。
在DRF中执行部分更新在我的DRF模型视图集中,我覆盖了partial_update
函数(服务器端)。
class AnimalTreatmentViewSet(viewsets.ModelViewSet):
queryset = MyObject.objects.all()
serializer_class = MyObjectSerializer
def create(self, request):
# It works with $http.post()
pass
def update(self, request, pk=None):
# It works with $http.put()
pass
def list(self, request):
# It works with $http.get()
pass
def partial_update(self, request, pk=None):
# This one wont work with $http.patch()
instance = self.get_object()
serializer = self.serializer_class(instance, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在客户端角度处理用户请求。
$http.patch('/api/my_viewset_url/1', data);
但我得到了这个回复方法不允许(PATCH):/ api / my_viewset_url / 1
将
$http.get()
请求与DRF模型视图集list(self, request)
一起使用时,适用于$http.post()
def create(self, request)
创建对象和$http.put()
的列表相同使用def update(self, request)
更新对象。
出了什么问题?或者DRF模型视图集中partial_update的正确http动词是什么
答案 0 :(得分:0)
似乎URL缺少尾部斜杠。
默认情况下,SimpleRouter / DefaultRouter创建的URL附加了一个 尾随斜线。在实例化路由器时,可以通过将trailing_slash参数设置为False来修改此行为。例如:
router = routers.DefaultRouter(trailing_slash=False)