【问题标题】:Django REST Framework Batch PUT (Update)Django REST 框架批量 PUT(更新)
【发布时间】:2014-10-28 16:03:50
【问题描述】:

我已经实现了视图集和路由器,制作了一个返回某些特定字段的 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"
}

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

注意:'item','descripcion','unidad' 字段来自另一个模型,这就是我注释 ProductoSerializer 的原因,所以我决定在 json 中包含特定值。

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

【问题讨论】:

    标签: json django django-rest-framework


    【解决方案1】:

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

    稍加修改即可改成work with routers。这应该可以让你做你正在寻找的东西。

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

    这听起来像是您在寻找PATCH,尽管这不允许像PUT 允许的那样创建对象。

    【讨论】:

    • 优秀!! work with routers 链接对我有用;)谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2019-03-05
    • 2020-05-30
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多