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

使用Pydantic创建反向关联遇ForwardRef错误,如何解决?

解决Pydantic双向关联模型的ForwardRef错误

你的问题出在双向引用的模型定义完成后,没有同时更新两个类的ForwardRef。只调用A.update_forward_refs()是不够的,因为B里也引用了A,两个类的引用都需要解析。

方法一:手动更新两个类的引用

在两个类定义完成后,分别调用它们的update_forward_refs()方法,确保所有ForwardRef都被解析为实际的类类型:

from typing import Optional
from pydantic import BaseModel


class A(BaseModel):
    x: int
    b: Optional['B'] = None

    class Config:
        orm_mode = True


class B(BaseModel):
    y: int
    a: Optional['A'] = None

    class Config:
        orm_mode = True


# 关键步骤:同时更新两个类的引用
A.update_forward_refs()
B.update_forward_refs()

a = A(**{"x": 5, "b": {"y": 1}})
print(a)

方法二:使用Python延迟注解(Python 3.7+)

如果你的Python版本在3.7及以上,可以导入from __future__ import annotations,这样类型注解可以直接使用类名(不需要用字符串包裹),Pydantic会自动处理延迟引用,无需手动调用update_forward_refs():

from __future__ import annotations
from typing import Optional
from pydantic import BaseModel


class A(BaseModel):
    x: int
    b: Optional[B] = None

    class Config:
        orm_mode = True


class B(BaseModel):
    y: int
    a: Optional[A] = None

    class Config:
        orm_mode = True


a = A(**{"x": 5, "b": {"y": 1}})
print(a)

以上两种方法都能解决你遇到的ConfigError,根据你的Python版本选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:35:20