2014-10-28 92 views
1

我已經實現了視圖集和路由器,使得API返回了一些特定的字段,我獲得了正確的信息,並且我可以更新(PUT)JUST ONE JSON,一個接一個,我需要同時更新所有這些內容。Django REST框架批處理PUT(更新)

我有這個在我的serializers.py

class OCompraDetalleSerializer(serializers.HyperlinkedModelSerializer): 
# producto = ProductoSerializer(many=False) 
    item = serializers.RelatedField(source='producto.modelo') 
    descripcion = serializers.RelatedField(source='producto.descripcion') 
    unidad = serializers.RelatedField(source='producto.unidad') 
# ocompra = OCompraSerializer(many = False) 
    class Meta: 
     model = OCompraDetalle 
     fields = ('url','item','descripcion','unidad','cantidad_ordenada','cantidad_recibida','fecha_entrega','precio','epc') 

的API返回我這個

HTTP 200 OK 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 

[ 
    { 
     "url": "http://localhost:8000/api/ocompradetalle/1/", 
     "item": "AANS/428375", 
     "descripcion": "SPLICING KIT SHIPPING ASSEMBLY", 
     "unidad": "PZA", 
     "cantidad_ordenada": "1", 
     "cantidad_recibida": "1", 
     "fecha_entrega": "2015-07-14", 
     "precio": "500", 
     "epc": "0320CAF425" 
    }, 
    { 
     "url": "http://localhost:8000/api/ocompradetalle/5/", 
     "item": "AANS/53042", 
     "descripcion": "NOZZLE F-1/2 W/BLOW OFF CAP,LOCKWASHERS", 
     "unidad": "PZA", 
     "cantidad_ordenada": "5", 
     "cantidad_recibida": "0", 
     "fecha_entrega": "2015-07-14", 
     "precio": "300", 
     "epc": "0436F0BECD" 
    }, 
... 

所以允許部分表明,我不能說,但如果我打開一個一個細節,我得到這個:

HTTP 200 OK 
Content-Type: application/json 
Vary: Accept 
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS 

{ 
    "url": "http://localhost:8000/api/ocompradetalle/1/", 
    "item": "AANS/428375", 
    "descripcion": "SPLICING KIT SHIPPING ASSEMBLY", 
    "unidad": "PZA", 
    "cantidad_ordenada": "1", 
    "cantidad_recibida": "1", 
    "fecha_entrega": "2015-07-14", 
    "precio": "500", 
    "epc": "0320CAF425" 
} 

使UP DATE,我的問題是: 如何在同一時間放置(更新)整個JSON,而不是爲每個單個條目創建更新?

注:'item','descripcion','unidad'領域來自另一個型號,這就是爲什麼我有ProductoSerializer評論,所以我決定將在JSON的具體數值。

注意2:我只需要爲每個條目PUT或更新cantidad_recibida值。

回答

3

Django REST Framework不允許對對象進行批量修改,但已創建了一個可以批量更新的包。 Django REST Framework Bulk是一個軟件包,允許您將mixin添加到任何通用視圖(包括ViewSets),以便使其能夠批量創建,更新或刪除對象。

它可以作出work with routers略作修改。這應該允許你做你正在尋找的東西。

注2:我只需要爲每個項目放置或更新cantidad_recibida值。

這聽起來像您正在尋找PATCH,雖然這不允許以PUT允許的相同方式創建對象。

+0

超凡! '與路由器'工作的鏈接爲我工作;) 謝謝! – 2014-10-28 17:48:01