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

如何使用Pydantic验证模型中end_date晚于init_date?

解决Pydantic模型中end_date晚于init_date的校验问题

方法一:字段级校验器(Pydantic v2+)

用@field_validator针对end_date做跨字段校验,确保它晚于init_date:

from pydantic import BaseModel, field_validator, ValidationError
from datetime import date

class DateRangeModel(BaseModel):
    init_date: date
    end_date: date

    @field_validator('end_date')
    def end_must_be_after_init(cls, value, info):
        init_date = info.data.get('init_date')
        if init_date and value <= init_date:
            raise ValueError('end_date必须晚于init_date')
        return value

# 测试示例
try:
    valid_case = DateRangeModel(init_date=date(2024, 3, 1), end_date=date(2024, 3, 10))
    print("校验通过:", valid_case)
except ValidationError as e:
    print("校验失败:", e.errors())

方法二:模型级校验器

如果需要更复杂的跨字段逻辑,用@model_validator做全局校验:

from pydantic import BaseModel, model_validator, ValidationError
from datetime import date

class DateRangeModel(BaseModel):
    init_date: date
    end_date: date

    @model_validator(mode='after')
    def check_date_order(self):
        if self.end_date <= self.init_date:
            raise ValueError('end_date必须晚于init_date')
        return self

# 测试非法场景
try:
    invalid_case = DateRangeModel(init_date=date(2024, 3, 10), end_date=date(2024, 3, 1))
except ValidationError as e:
    print("校验失败:", e.errors())

额外:计算天数差

校验通过后,直接通过日期对象的减法计算天数差:

delta = valid_case.end_date - valid_case.init_date
print(f"两日期间隔: {delta.days} 天")

内容的提问来源于stack exchange,提问作者Adão Oliveira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:44:49