我有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')
但是,我有自己的,字段瘦的子类。嵌套看起来类似于以下内容:
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
我将每个架构更改为使用NestedRelationship而不是本机Nested
类型,我得到:
marshmallow.exceptions.RegistryError: Class with name 'B' was not found. You may need to import the class.
NestedRelationship是一个相对较薄的子类,我对行为的差异感到惊讶。我在这里做错了吗?我不是在适当地打电话吗?
答案 0 :(得分:0)
问题在于您访问self.schema
的额外代码。当您定义A.b
字段时,它会尝试解析它,但尚未定义它。另一方面,marshmallow.fields.Nested
不会尝试在构造时解析模式,因此没有这个问题。