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

Django Ninja中Pydantic嵌套模型报value_error.missing错误排查

问题原因及解决方法

出现这个错误的核心原因是接口返回数据里没有deals字段,但新Schema要求必须提供该字段——Swagger显示正确只是因为它仅读取Schema定义,不会校验实际返回的数据。具体场景和解决办法如下:

  • 视图返回结构未匹配Schema调整
    原代码返回的是包含offers、sold、bought的对象(比如Django模型实例),但新Schema要求把sold和bought嵌套到deals下。需要手动构造符合新结构的返回数据:

    # 视图函数示例
    def get_user_extra(request, user_id: int):
        user_extra = UserExtraData.objects.get(id=user_id)
        return {
            "offers": user_extra.offers,
            "deals": {
                "sold": user_extra.sold,
                "bought": user_extra.bought
            }
        }
    
  • 模型未提供deals属性
    若习惯直接返回模型实例,可给模型添加property方法自动生成deals字段:

    class UserExtraData(models.Model):
        offers = models.IntegerField()
        sold = models.IntegerField()
        bought = models.IntegerField()
    
        @property
        def deals(self):
            return {"sold": self.sold, "bought": self.bought}
    

    这样返回模型实例时,Pydantic会自动读取该属性完成序列化。

  • Schema的deals字段未设置可选/默认值
    若业务允许deals为空,可给Schema的deals字段标记为可选并设默认值:

    from typing import Optional
    from ninja import Schema
    
    class DealsOut(Schema):
        sold: int
        bought: int
    
    class UserExtraDataOut(Schema):
        offers: int
        deals: Optional[DealsOut] = None
    

    注意:仅适合允许deals为空的场景,若业务要求必填,仍需确保返回数据包含deals。

  • Schema定义错误
    检查DealsOut与UserExtraDataOut的嵌套关系是否正确,比如deals字段的类型是否写错、DealsOut的字段名是否与实际返回键不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:55:20