Упрощенные модели:
Код: Выделить всё
class Account(BaseModel):
id: UUID = Field(default_factory=uuid4)
owner: Customer
_transactions: List[Transaction] = list()
@fields.computed_field()
@property
def transactions(self) -> List[Transaction]:
return self._transactions
@transactions.setter
def transactions(self, list_: List[Transaction]) -> None:
# DO SOME CHECKS
self._transactions = sorted_list
class Transaction(BaseModel):
id: UUID = Field(default_factory=uuid4)
date: datetime.date = Field(frozen=False)
amount: PositiveFloat = Field(frozen=False)
class Customer(BaseModel):
id: UUID = Field(default_factory=uuid4)
name: datetime.date = Field(frozen=False)
Я могу успешно сериализовать учетную запись в JSON, включая транзакции:
Код: Выделить всё
x = my_account.model_dump_json()
x
Код: Выделить всё
'{
"id":"1eeed00b-3bd7-48fa-ab6a-6979618ef723",
"owner":{
"id":"0cad242dad03-492b-9c6b-86f0b75f9c00",
"name":"Bob"
},
"transactions":[
{"id":"42738f1d-e998-4add-94b8-713afe25b525","date":"2012-01-01","amount":1.0}
]
}'
Однако, когда я пытаюсь восстановить модель из строки JSON, поле транзакций остается пустым. Нет проблем с полем владельца, которое содержит вложенную модель клиента:
Код: Выделить всё
Account.model_validate_json(x)
Код: Выделить всё
Account(
id=UUID('1eeed00b-3bd7-48fa-ab6a-6979618ef723'),
owner=Customer(
id=UUID('0cad242d-ad03-492b-9c6b-86f0b75f9c00'),
name='Bob'
),
transactions=[]
)
Подробнее здесь: https://stackoverflow.com/questions/784 ... s-are-held