2017-02-14 193 views
1

我試着採用了棱角分明的$ HTTP的DRF進行部分更新正確的HTTP動詞。什麼是Django的REST partial_update

在我的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); 

但我得到這個響應不允許的方法(補丁):/ API/my_viewset_url/1

當使用$http.get()要求與DRF模型視圖集中list(self, request)它運作良好,爲獲得相同的列表無二$http.post()def create(self, request)def update(self, request)更新對象創建對象和$http.put()

怎麼了?或者是什麼DRF模型正確的HTTP動詞用於partial_update視圖集中

+0

你使用的是模型視圖嗎?哪些mixins?你可以分享視圖的其餘部分嗎?謝謝!! – bobleujr

+0

即時通訊使用modelviewset,謝謝你的迴應! –

+0

@bobleujr我更新了我的問題 –

回答

0

這似乎是URL缺少結尾的斜線。

相關documentation

缺省情況下由SimpleRouter/defaultrouter中創建的網址被附加有 斜線。在實例化路由器時,可以通過將trailing_slash參數設置爲False來修改此行爲。例如:

router = routers.DefaultRouter(trailing_slash=False)