Python 使用 pydantic 验证日期以接受空字符串
Python validate date using pydantic to accept empty string
我正在使用 pydantic 来验证 AWS Lambda 中的数据,我有一个日期字段可以接受有效日期或空字符串。
当我向该字段 'date' 传递一个空字符串时,它不起作用并且出现以下错误:
pydantic.error_wrappers.ValidationError: 1 validation error for EmployeeInput
date
invalid datetime format (type=value_error.datetime)
我是这样定义模型的:
class EmployeeInput(BaseModel):
last_name: str = ''
first_name: str = ''
date: Optional[datetime] = get_date_now()
我尝试使用 Union[datetime, str]
,它现在接受空字符串但不再验证日期。
如何让我的字段接受空字符串 '' 并验证内容是否正确?
你的第一个错误是正常的。实际上,您要求的是日期或 None
,但您传递的是一个字符串,当然是空字符串,但仍然是一个字符串,因此,您不符合方案。
我认为仅接受日期或空字符串的解决方案是使用联合编写您的架构,并编写您自己的验证器,如下所示:
def date_validator(date):
if not isinstance(date, datetime) and len(date) > 0:
raise ValueError(
"date is not an empty string and not a valid date")
return date
class EmployeeInput(BaseModel):
last_name: str = ''
first_name: str = ''
date: Union[datetime, str] = get_date_now()
_date_validator = validator(
'date', allow_reuse=True)(date_validator)
我正在使用 pydantic 来验证 AWS Lambda 中的数据,我有一个日期字段可以接受有效日期或空字符串。
当我向该字段 'date' 传递一个空字符串时,它不起作用并且出现以下错误:
pydantic.error_wrappers.ValidationError: 1 validation error for EmployeeInput
date
invalid datetime format (type=value_error.datetime)
我是这样定义模型的:
class EmployeeInput(BaseModel):
last_name: str = ''
first_name: str = ''
date: Optional[datetime] = get_date_now()
我尝试使用 Union[datetime, str]
,它现在接受空字符串但不再验证日期。
如何让我的字段接受空字符串 '' 并验证内容是否正确?
你的第一个错误是正常的。实际上,您要求的是日期或 None
,但您传递的是一个字符串,当然是空字符串,但仍然是一个字符串,因此,您不符合方案。
我认为仅接受日期或空字符串的解决方案是使用联合编写您的架构,并编写您自己的验证器,如下所示:
def date_validator(date):
if not isinstance(date, datetime) and len(date) > 0:
raise ValueError(
"date is not an empty string and not a valid date")
return date
class EmployeeInput(BaseModel):
last_name: str = ''
first_name: str = ''
date: Union[datetime, str] = get_date_now()
_date_validator = validator(
'date', allow_reuse=True)(date_validator)