Resolución automática de clave de diccionario con esquemas anidados utilizando Marshmallow

Tengo un esquema Marshmallow donde los objetos usan una clave para referirse a un objeto que está definido en un diccionario en otra parte de la estructura. Quiero que la clave se resuelva automáticamente al deserializar el objeto. ¿Cómo puedo lograr este efecto en Marshmallow de manera idiomática?

La solución por ahora es resolver todas las referencias manualmente, pero esto parece torpe, ya que la naturaleza declarativa de Marshmallow debería poder hacerlo por nosotros automáticamente.

enga en cuenta que Marshmallow-SQLAlchemy admite este tipo de (des) serialización cuandoas @columnas se declaran como relaciones ", que hace esto automáticamente por nosotros, pero quiero hacerlo con datos JSON.

Aquí hay un ejemplo de lo que quiero lograr, confields.Relationship siendo algo que aún no existe:

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": []
# }

También he presentado unaissue en el repositorio Marshmallow Github.

Respuestas a la pregunta(1)

Su respuesta a la pregunta