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

如何使用Pydantic为单个字段设置Datetime和Null两种允许的类型

Pydantic字段同时支持Datetime和Null的实现方法

你预期的validated_at:Opt[Datetime], Opt[Null]写法不符合Python类型注解语法,无法直接生效,可通过以下方式实现需求:

方案1:直接复用现有Opt定义(推荐)

如果你代码中的Opt是typing.Optional的别名,你当前写的validated_at: Opt[Datetime]本身就已经满足需求。Optional[T]的底层定义就是Union[T, None],天然允许传入合法Datetime值或者Null(Python中对应None),不需要额外修改。

方案2:显式声明联合类型

如果需要更直观的标注允许的两种类型,可按Python版本选择写法:

  • Python 3.10及以上版本,用管道符简化写法:
validated_at: Datetime | None
  • Python 3.9及以下版本,用typing.Union声明:
from typing import Union
validated_at: Union[Datetime, None]

异常排查

如果按上述配置后仍不允许传入空值,可检查两个常见问题:

  • 确认项目中自定义的Opt确实是typing.Optional的别名,没有被重写为非空类型
  • 检查validated_at对应的Field配置中是否手动加了nullable=False参数,移除该参数即可

修改后的完整类示例如下:

class Fdes(FdesCreate):
    """FDES Validation Schema for get requests"""
    id: PyObjectId = Field(default_factory=PyObjectId, alias="_id")
    created_at: Datetime 
    updated_at: Datetime
    # 以下两种写法二选一即可,效果完全一致
    validated_at: Opt[Datetime]
    # validated_at: Datetime | None
    archived_at: Opt[Datetime]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:21:00