Могу ли я иметь ограниченный тип «Необязательный» со значением по умолчанию «Нет» в pydantic V2?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я иметь ограниченный тип «Необязательный» со значением по умолчанию «Нет» в pydantic V2?

Сообщение Anonymous »

Может быть, кто-нибудь сможет мне помочь с пидантической проблемой. Я читал некоторые сообщения об этом, но до сих пор не понимаю, как обойти проблему: В коротко:
Могу ли я иметь необязательный ограниченный тип - в моем случае мне нужно поле, которое является необязательным[list[float] = None с ограничением что список должен состоять из двух элементов или иметь значение None после проверки.
Вот что у меня есть на данный момент...from typing import Annotated, Optional

from pydantic import AfterValidator, BaseModel, Field, ValidationError, ValidationInfo

def some_eventual_validation(value, info: ValidationInfo):
"""Dummy validator that eventually will do something (compare value to min/max)."""
return value

class OptionA(BaseModel):
min: Optional[float] = Field(None)
max: Optional[float] = Field(None)
value: Annotated[
Optional[list[float]],
AfterValidator(some_eventual_validation),
Field(
None,
min_length=2,
max_length=2,
validate_default=True,
),
]

try:
OptionA()
except TypeError as e:
print(e)
# In the case the default works, but it seems to apply the constraints from the Field annotation to the default value (which I believe is not the intended behavior for Optional fields)

class OptionB(BaseModel):
min: Optional[float] = Field(None)
max: Optional[float] = Field(None)
value: Optional[
Annotated[
list[float],
AfterValidator(some_eventual_validation),
Field(
None,
min_length=2,
max_length=2,
validate_default=True,
),
]
]

print("====")
try:
OptionB()
except ValidationError as e:
print(e)
# In this case, the default does not work --> shouldn't the code be able to infer the default from the Field annotation?


Подробнее здесь: https://stackoverflow.com/questions/793 ... ydantic-v2
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»