django - Django DRF:批量创建 API 的架构
问题描述
我正在使用 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 文档。但问题是生成的模式只检测我的请求主体只是单个模型。是否有任何配置可以使 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定义的数组类型
任何帮助将不胜感激。谢谢你的时间。
解决方案
我知道这是很老的帖子,但我遇到了类似的问题,作为 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"
))
推荐阅读
- bash - 将自定义 linux 子系统从一台机器导入另一台机器后,我无法让 ubuntu 将非 root 用户设置为默认用户
- html - Bootstrap justify-content-around 不传播项目
- javascript - 根据关键字数组过滤对象属性
- r - 比较两个数据集中的列
- python - Python Curve_fit.optimize put 函数模型与变量之间的条件
- c# - 使用 NLog 创建用于日志记录的自定义扩展函数
- flutter - 如何在颤动中将视频从模拟器内部存储加载到视频播放器
- python - 如何从单独列中的字符串中提取特定代码?
- awk - awk 从列 $3 创建多个包含模式和名称的文件
- python - 将 json 响应转换为 CSV 文件