如何在DRF Spectacular中以JSON格式传递post_id参数
如何在drf-spectacular的extend_schema中配置JSON格式请求体传递post_id
你的视图代码通过request.data.get('post_id')获取参数,但当前extend_schema_view的POST请求配置会让post_id以form_data格式传递,要改为JSON格式,需调整extend_schema的request_body参数配置:
现有视图代码
meta_obj = Meta.objects.filter(post = request.data.get('post_id'))
现有extend_schema_view配置
@extend_schema_view( get = extend_schema( description='展示博客页面所有已发布文章', parameters=[ OpenApiRequest("post_id",OpenApiTypes.NUMBER), OpenApiParameter("Accept-Language", OpenApiTypes.NUMBER, OpenApiParameter.HEADER), ], responses = MetaFullSerializer ), post = extend_schema( description='发布文章到博客页面展示', parameters=[ OpenApiParameter("Accept-Language", OpenApiTypes.NUMBER, OpenApiParameter.HEADER), ], responses = PostListSerializer ) )
原form_data格式配置(需替换)
request={ "multipart/form-data": { "type": "object", "properties": { "post_id": {"type": "int"},}, }, },
修改后的POST请求配置
在post对应的extend_schema中添加request_body,指定application/json格式的请求体结构:
@extend_schema_view( get = extend_schema( description='展示博客页面所有已发布文章', parameters=[ OpenApiRequest("post_id",OpenApiTypes.NUMBER), OpenApiParameter("Accept-Language", OpenApiTypes.NUMBER, OpenApiParameter.HEADER), ], responses = MetaFullSerializer ), post = extend_schema( description='发布文章到博客页面展示', parameters=[ OpenApiParameter("Accept-Language", OpenApiTypes.NUMBER, OpenApiParameter.HEADER), ], # 新增JSON格式请求体配置 request_body=OpenApiRequestBody( content={ "application/json": { "type": "object", "properties": { "post_id": {"type": "integer"} }, # 若post_id为必填参数,添加required字段 "required": ["post_id"] } } ), responses = PostListSerializer ) )
说明
- 用
request_body替代原form_data配置,明确指定请求内容类型为application/json,定义对应的JSON结构; - DRF会自动解析JSON请求体到
request.data中,视图里的request.data.get('post_id')可以正常获取参数; - 若
post_id是必填项,需在JSON schema中添加required: ["post_id"],确保文档和接口校验都能生效。
内容的提问来源于stack exchange,提问作者Sadegh-khan
相关产品推荐
相关产品推荐

