выходы:

я есть схема Marshmallow, где объекты используют ключ для ссылки на объект, который определен в словаре в другой части структуры. Я хочу, чтобы ключ автоматически разрешался при десериализации объекта. Как мне добиться этого эффекта в «Зефире» идиоматическим способом?

Обходной путь на данный момент заключается в том, чтобы разрешить все ссылки вручную, но это кажется неуклюжим, поскольку декларативный характер Зефира должен быть в состоянии сделать это для нас автоматически.

Обратите внимание, что Marshmallow-SQLAlchemy поддерживает этот тип (де) сериализации, когдастолбцы объявлены как отношения"которые делают это автоматически для нас, но я хочу сделать это с данными JSON.

Вот пример того, чего я хочу достичь, сfields.Relationship быть чем-то, чего еще не существует:

class UserSchema(Schema):
    name = fields.String()
    email = fields.Email()
    friends = fields.Relationship('self', path="AddressBook.contacts", many=True)

class AddressBookSchema(Schema):
    contacts = nested.Dict(keys=fields.String(), values=fields.Nested(UserSchema))

# ... create ``user`` ...
serialized_data = AddressBookSchema().dump(user)
pprint(serialized_data)
# "contacts": {
#   "Steve": {
#     "name": "Steve",
#     "email": "[email protected]",
#     "friends": ["Mike"]
#   },
#   "Mike": {
#     "name": "Mike",
#     "email": "[email protected]",
#     "friends": []
# }


deserialized_data = UserSchema().load(result)
pprint(deserialized_data)
# "contacts": {
#   "Steve": {
#     "name": "Steve",
#     "email": "[email protected]",
#     "friends": [ {"name": "Mike", "email": "[email protected]"]
#   },
#   "Mike": {
#     "name": "Mike",
#     "email": "[email protected]",
#     "friends": []
# }

Я также подалвыпуск репозитория Marshmallow Github.

Ответы на вопрос(1)

Ваш ответ на вопрос