Django DRF:批量创建API的架构

时间:2018-11-13 03:44:41

标签: django django-rest-framework

我正在使用django-rest-framework来构建支持批量创建/更新的API。 在这种情况下,api会接受类似对象的列表

[
    {"foo":"bar"},
    {"foo":"bar"}
]

我用于允许批量api的代码只是一个小的修改,如果数据是列表,则为序列化器添加选项many = True。就像:

class FooViewSet(views.ModelViewSet):
    def create(self, request, *args, **kwargs):
        many = isinstance(request.data, list)
        if many:
            serializer = self.get_serializer(data=request.data, many=True)
            serializer.is_valid(raise_exception=True)
            self.perform_bulk_create(serializer)
        else:
            ................

我正在使用drf_yasg生成api doc。 但是问题是生成的模式仅检测单个模型就一直检测我的请求主体。是否有任何配置可以使DRF模式生成器知道它将接受列表类型?

这是DRF生成的架构

{
  "post": {
    "operationId": "foos_create",
    "description": "",
    "parameters": [
      {
        "name": "data",
        "in": "body",
        "required": true,
        "schema": {
          "$ref": "#/definitions/Foo"
        }
      }
    ],
    "responses": {
      "201": {
        "description": "",
        "schema": {
          "$ref": "#/definitions/Foo"
        }
      }
    },
    "tags": [
      "foos"
    ]
  }
}

我的期望是模式是Foo 定义

数组类型

任何帮助将不胜感激。感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

我知道这是一个很老的帖子,但是我面临着一个类似的问题,并且DRF和python的菜鸟花了一段时间才弄清楚了这个问题。 我只需要添加一个简单的装饰器。 仅供参考,我使用https://github.com/miki725/django-rest-framework-bulk进行批量更新。

@method_decorator(name='perform_bulk_create', decorator=swagger_auto_schema(
    request_body=ContactSerializer(many=True),
    operation_description="post list of contacts"
))