我正在try 创建一个接受某种格式的字符串日期时间的模型,但如果字符串值是空字符串"",则它应该在模型中作为类型无.
我正在使用BeforeGuardator,我认为这是正确的做法.
使用下面的代码,我希望parse_datetime函数返回无类型,然后将其传递给pydantic验证器.
有人能带领我走向正确的方向吗?
from pydantic import (
BaseModel,
Field,
ValidationError,
BeforeValidator,
)
from typing import Annotated, Any, Union
from datetime import datetime, date
def parse_datetime(value: str):
print(len(value.strip()))
if len(value.strip()) > 0:
try:
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S")
except Exception as e:
raise ValueError(str(e))
else:
print("returning None")
value = None
return value
date_time = Annotated[datetime, BeforeValidator(parse_datetime)]
class Model(BaseModel):
dt: date_time | None
使用空字符串时,我会出现验证错误
data = {"dt": ""}
try:
Model.model_validate(data)
except ValidationError as e:
print(e)
1 validation error for Model
dt
Input should be a valid datetime [type=datetime_type, input_value=None, input_type=NoneType]
然而传递它"无"类型有效
data = {"dt": None}
try:
Model.model_validate(data)
except ValidationError as e:
print(e)