Как десериализовать вложенные модели Pydantic из JSON, где вложенные модели хранятся в списке в вычисляемом поле.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как десериализовать вложенные модели Pydantic из JSON, где вложенные модели хранятся в списке в вычисляемом поле.

Сообщение Anonymous »

У меня есть модель Pydantic, представляющая транзакции по хранению банковского счета, которые сами по себе являются моделями, вложенными в модель счета. Транзакции хранятся в списке в скрытом поле, и доступ к ним осуществляется через вычисляемое поле, которое применяет некоторые проверки в методе установки.
Упрощенные модели:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как десериализовать объект класса списка Json. не умеет десериализовать. Ошибка неправильного json в позиции 0 [закрыто]
    Гость » » в форуме C#
    0 Ответы
    69 Просмотры
    Последнее сообщение Гость
  • SwiftUI наблюдает за изменениями в вычисляемом свойстве
    Anonymous » » в форуме IOS
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Получите JSON из FastAPI, используя вложенные модели Pydantic
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Десериализовать псевдоним JSON с помощью Pydantic
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Десериализовать JSON во вложенные классы с полями ReactiveProperty.
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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