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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:23:24