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)