#python #pydantic
#python #pydantic
Вопрос:
Пример кода:
class MyModel(BaseModel):
name: str = "examplename"
class MySecondModel(BaseModel):
derivedname: Optional[str]
@validator('derivedname')
def default_name(cls, v, *, values, **kwargs):
return v or values[MyModel.name] # psuedocode, doesn't work
Я знаю, что это работает, когда поле находится в том же классе, и у меня нет проблем с этим. Однако я хотел бы указать значение по умолчанию на основе поля в экземпляре другой модели pydantic.
Конечно, я мог бы просто взять модель в своем коде и сделать это программно, но я бы хотел избежать этого по вполне очевидным причинам.
Возможно ли это или я зря трачу свое время?
Ответ №1:
Это необычно, но вы можете сохранить связанный объект модели как переменную частного класса и использовать его в валидаторе.
class MyModel(BaseModel):
name: str = "examplename"
class MySecondModel(BaseModel):
derivedname: Optional[str]
_my_model: ClassVar[MyModel] = MyModel()
@validator('derivedname')
def default_name(cls, v, *, values, **kwargs):
return v or cls._my_model.name
Комментарии:
1. Будет ли это работать, если модель не использует значение по умолчанию для «name»?
2. Конечно, вы можете сохранить
_my_model
произвольный предварительно созданный экземпляр модели, а также переписать его позже