互いに関連する 2 つのオブジェクトがあります。関連する属性を介して、あるオブジェクトから別のオブジェクトにアクセスできるようにしたいと考えています。
例えばA.b_relationship.obj.some_property
循環インポートを作成せずにこれを行うにはどうすればよいですか?
# lib.py
class Relationship(object):
def __init__(self, obj):
self.obj = obj
# a.py
class A(object):
b_relationship = Relationship(B)
# b.py
class B(object):
a_relationship = Relationship(A)
わかりやすくするために、この追加の例を追加しました。明らかに、SQLAlchemy はこの問題をbackref
属性で解決しました。この種のものをマシュマロに実装することが、その動作を壊すことなく実行できるかどうかはわかりません。考え方を変える必要があるのではないでしょうか?
from marshmallow import Schema
from marshmallow.fields import String
from project.database import db
class PersonModel(db.Model):
name = db.Column(db.String)
class PetModel(db.Model):
name = db.Column(db.String)
owner = db.relationship('PersonModel', backref='pets')
class PersonSchema(Schema):
name = fields.String(init_arg='some value')
pets = fields.Relationship(related_schema=PetSchema)
class PetSchema(Schema):
name = fields.String()
owner = fields.Relationship(related_schema=PersonSchema)