依存関係のサイクル/三角形を形成するネストされたフィールドを持つ 3 つのマシュマロ スキーマがあります。two-way nestingのボイラープレートを使用すれば、問題はないようです。
from marshmallow import Schema, fields
class A(Schema):
id = fields.Integer()
b = fields.Nested('B')
class B(Schema):
id = fields.Integer()
c = fields.Nested('C')
class C(Schema):
id = fields.Integer()
a = fields.Nested('A')
ただし、次のような fields.Nested の独自の薄いサブクラスがあります。
from marshmallow import fields
class NestedRelationship(fields.Nested):
def __init__(self, nested,
include_data=True,
**kwargs):
super(NestedRelationship, self).__init__(nested, **kwargs)
self.schema.is_relationship = True
self.schema.include_relationship_data = include_data
Nested
そして、ネイティブ型の代わりに NestedRelationship を使用するように各スキーマを変更すると、次のようになります。
marshmallow.exceptions.RegistryError: Class with name 'B' was not found. You may need to import the class.
NestedRelationship は比較的薄いサブクラスであり、動作の違いに驚いています。ここで何か間違ったことをしていますか?スーパーを適切に呼び出していませんか?