2014-09-26 107 views
0

我試圖通過Django Rest PUT方法更新數據。Django Rest更新

class TableView(generics.ListAPIView, generics.UpdateAPIView, generics.CreateAPIView): 

    serializer_class = TableSerializer 

    def update(self, request, *args, **kwargs): 

     if kwargs.__len__() != 0: 
      tableid = kwargs['id'] 
      mycol = request.DATA['col'] 
      Table.objects.filter(id=tableid).update(col=mycol) 

所以,這個工作,但數據由模型的Table.object更新。有沒有更新數據的通用方法?我的意思是,如果我把col1和col2上的數據,就會更新它們。如果我只發送COL1,它只會更新它..

回答

0

這是PATCH請求爲您做的。但是,在某些情況下,PATCH不受支持(例如某些較早版本的Lighttpd),或者出於傳統原因您可能需要使用PUT。

好處是PATCH和PUT請求在Django REST框架中幾乎相同。它們共享大部分代碼,主要區別在於PATCH請求將參數partial設置爲True。

什麼,你可以嘗試通過手工做的是,在你的update()法設置的部分標誌,並且在傳遞到你的串行像:

def update(self, request, *args, **kwargs): 
    partial = True 
    instance = self.get_object() 
    serializer = self.get_serializer(instance, data=request.data, partial=partial) 

這應該只更新被作爲參數傳入的部分請求。

通常情況下,PATCH請求將在您的ModelViewSet中調用perform_update()函數,並將partial標誌設置爲true,然後在此之後調用update()函數。來源:https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L76

一些信息從Django REST框架頁面關於更新mixin:http://www.django-rest-framework.org/api-guide/generic-views/#updatemodelmixin