我正在使用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 定义
的数组类型任何帮助将不胜感激。感谢您的宝贵时间。
答案 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"
))