You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为swagger_auto_schema的request_body设置属性,解决数组items配置报错问题

swagger_auto_schema request_body数组类型参数配置方案

swagger_auto_schema的request_body属性完全支持自定义配置,你遇到的报错是数组类型参数的items字段配置不规范导致的,错误原因是openapi.Schema中TYPE_ARRAY对应的items参数不能直接传入Serializer类,需要传入Schema对象或者序列化器引用。

核心修改点:将原来直接传入UsersSerializer的位置替换为openapi.SchemaRef(UsersSerializer)

修正后的完整代码如下:

@swagger_auto_schema(
    operation_description="修改用户所属店铺",
    method='PUT',
    request_body=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'name': openapi.Schema(type=openapi.TYPE_STRING, description='店铺名称'),
            'description': openapi.Schema(type=openapi.TYPE_STRING, description='店铺描述'),
            'logo': openapi.Schema(type=openapi.TYPE_FILE, description='店铺logo文件'),
            'cover_picture': openapi.Schema(type=openapi.TYPE_FILE, description='店铺封面图文件'),
            'category': openapi.Schema(type=openapi.TYPE_STRING, description='店铺分类'),
            'phone_number': openapi.Schema(type=openapi.TYPE_STRING, description='联系电话'),
            'email': openapi.Schema(type=openapi.TYPE_STRING, description='联系邮箱'),
            'coords_lat': openapi.Schema(type=openapi.TYPE_STRING, description='纬度坐标'),
            'coords_lng': openapi.Schema(type=openapi.TYPE_STRING, description='经度坐标'),
            'audio': openapi.Schema(type=openapi.TYPE_FILE, description='音频介绍文件'),
            'address': openapi.Schema(type=openapi.TYPE_STRING, description='店铺地址'),
            'admin': openapi.Schema(
                type=openapi.TYPE_ARRAY, 
                description='店铺管理员列表',
                items=openapi.SchemaRef(UsersSerializer)
            ),
        }
    )
)

如果你不需要引用完整的UsersSerializer,也可以手动定义数组内元素的Schema结构,示例如下:

'admin': openapi.Schema(
    type=openapi.TYPE_ARRAY, 
    description='店铺管理员列表',
    items=openapi.Schema(
        type=openapi.TYPE_OBJECT,
        properties={
            'id': openapi.Schema(type=openapi.TYPE_INTEGER, description='管理员用户ID'),
            'username': openapi.Schema(type=openapi.TYPE_STRING, description='管理员用户名')
        }
    )
)

补充注意事项

  • 如果当前接口使用multipart/form-data格式传参,嵌套数组/对象的解析需要提前配置对应解析器,否则可能出现后端接收参数异常的问题
  • 如果你使用的是较新版本的drf-yasg,也可以直接将request_body的值设置为对应序列化器类,不需要手动编写Schema结构,插件会自动生成接口文档

内容的提问来源于stack exchange,提问作者gustavodelamou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 08:54:06