Django REST框架批量PUT(更新)

时间:2014-10-28 16:03:50

标签: json django django-rest-framework

我已经实现了视图集和路由器,制作了一个API,它返回了一些特定的字段,我正确地获取了信息,并且我可以更新(PUT) JUST ONE 的JSON中的细节,一个一个,我需要同时更新所有这些。

我在 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"
    },  
...

所以ALLOW部分表示我可以放,但如果我打开一个细节,我就明白了:

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"
}

可以更新,我的问题是: 如何同时对整个JSON进行PUT(更新),而不是为每个条目创建更新?

注意: 'item','descripcion','unidad'字段来自另一个模型,这就是我对ProductoSerializer进行评论的原因,因此我决定在json中包含特定值。

注2:我只需为每个条目PUT或更新cantidad_recibida值。

1 个答案:

答案 0 :(得分:3)

Django REST Framework不允许对对象进行批量修改,但是已经创建了一个带来批量更新的包。 Django REST Framework Bulk是一个包,允许您将mixin添加到任何通用视图(包括ViewSets),使其能够批量创建,更新或删除对象。

可以稍加修改work with routers。这应该可以让你做你想要的。

  

注2:我只需为每个条目PUT或更新cantidad_recibida值。

这听起来像是在寻找PATCH,虽然这不允许以PUT允许的方式创建对象。