簡體   English   中英

Python使用pydantic驗證日期以接受空字符串

[英]Python validate date using pydantic to accept empty string

我正在使用 pydantic 驗證 AWS Lambda 中的數據,我有一個日期字段,可以接受有效日期或空字符串。

當我將一個空字符串傳遞給該字段“日期”時,它不起作用並且我收到以下錯誤:

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 ,但是您傳遞了一個字符串,當然,它是空的,但仍然是一個字符串,因此,您不符合該方案。

我看到的僅接受日期或空字符串的解決方案是使用 Union 編寫架構,並編寫自己的驗證器,如下所示:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM