Аналог allow_blank в Pydantic
Задача:
Появилась необходимость на бэке при получении строки типа "" превратить её в None
Есть просто запрет на пустые строки
# min_length для полей
class Model(BaseModel):
title: str = Field(min_length=1)
# либо через конфиг для всех полей min_anystr_length
class SecondModel(BaseModel):
title: str
class Config:
min_anystr_length = 1
Но это не решает приведение пустой строки к None
Для этой задачи можно использовать валидатор:
def optional_string_validator(value: str | None) -> str | None:
""" Валидатор предназначен для реализации логики: получили пустую строку - считаем её None """
if value is not None:
value = value.strip()
if value == '':
value = None
return value
Дополнительно можно реализовать свои типы(для обязательной строки и для опциональной), чтобы не указывать каждый раз валидаторы
# использование с помощью Annotated с указанием типа реализует корректные ошибки pydantic,
# заменить два типа на один не получится
MyStr = Annotated[str, BeforeValidator(optional_string_validator)]
MyOptionalStr = Annotated[str | None, BeforeValidator(optional_string_validator)]
class Model(BaseModel):
title: MyStr