SQLAlchemy关联字段设init=False仍触发Pydantic必填校验问题
解决方法
你遇到的问题是:虽然给owner字段设置了init=False,但Pydantic的dataclass仍会把非可选的Mapped[User]字段视为必填项——即便它不在初始化参数列表里。可以通过以下两种方式解决:
方式一:将字段标记为可选类型
把owner的类型改为Mapped[Optional[User]],明确告知Pydantic该字段可以为None,无需强制提供值:
from typing import Optional owner: Mapped[Optional[User]] = relationship( "User", back_populates="transcripts", init=False, )
方式二:给字段设置默认值并标记为可选
使用Pydantic的Field显式标记字段可选,同时设置default=None:
from pydantic import Field owner: Mapped[User] = relationship( "User", back_populates="transcripts", init=False, default=None, metadata={"pydantic_field": Field(optional=True)}, )
两种方法都能让Pydantic理解owner是模型创建后才会被填充的关联字段,不会在初始化时强制要求传入。
内容的提问来源于stack exchange,提问作者siva
相关产品推荐
相关产品推荐

