import BaseModel, Field, field_validator
class Foo(BaseModel):
name: str
bar: str = Field(default=None)
@field_validator("bar", mode="before")
@classmethod
def override_bar(cls, v: str, values: dict):
if values['name'] == "Julia":
return "Дура"
return v
foo = Foo(name="Julia")
foo
#>: Foo(name='Julia', bar=None)
Потому что дефолт стоит
А без дефолта ошибка что require
Укажи ему тип Optional[str]
ты со вторым точно работал?
Суть не сильно измениться, найди как указать опциональность поля
Бесполезный совет
https://docs.pydantic.dev/latest/migration/#required-optional-and-nullable-fields
И в итоге я был прав
Это не решает проблему
В чем проблема то?
bar там в любом случае будет
Мне нужно кастомное служебное поле
В первом pydantic работал декоратор @validator("bar", always=True)
Во втором пидантике не нужен декоратор классметода, судя по доке, может в этом причина https://docs.pydantic.dev/latest/migration/#changes-to-validators-allowed-signatures
https://docs.pydantic.dev/latest/usage/validators/#field-validators
Кто подскажет как переопределить поле?
Обсуждают сегодня