Код: Выделить всё
class CriticalDefinition(BaseModel):
color: Color
value: int
@model_validator(mode="wrap")
@classmethod
def _alias_replacer(cls, v: Any, handler: ModelWrapValidatorHandler[Self]) -> Self:
global _alias
if isinstance(v, str) and (r := _alias.get(v)):
return r
if isinstance(v, dict) and "_alias" in v and (r := _alias.get(v["_alias"])):
return r
return handler(v)
Проблема в том, что когда я попытался написать c = CriticalDefinition(_alias="BLUE_50") в коде Python, я получил следующее предупреждение:
Код: Выделить всё
UserWarning: A custom validator is returning a value other than `self`.
Returning anything other than `self` from a top level model validator isn't supported when validating via `__init__`.
See the `model_validator` docs (https://docs.pydantic.dev/latest/concepts/validators/#model-validators) for more details.
c = CriticalDefinition(_alias="BLUE_50")
В документе, предоставленном по ссылке, говорится следующее:
Валидаторы Wrap: являются наиболее гибкими из всех. Вы можете запустить код до или после того, как Pydantic и другие валидаторы обработают входные данные, или вы можете немедленно прекратить проверку, либо досрочно вернув данные, либо вызвав ошибку.
Я думаю, что я написал код так, как сказано в документе (т. е. я вернул данные раньше). Но я не знаю, что я сделал не так.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-model-v
Мобильная версия