У меня есть два объекта, которые связаны друг с другом. Я хотел бы иметь доступ к одному объекту через другой, пройдя через связанный атрибут.
E.g. 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)
__init__
и импортируйте тудаA
иB
. Затем вы можете избежать циклического импорта в a.py и b.py. Это может быть актуально - person inspectorG4dget   schedule 26.01.2016_relationship
, которые необходимо связать. Позже я отключу эти поля и использую связанный объект для выполнения некоторых расчетов. - person Colton Allen   schedule 26.01.2016A.rel
, чтобы получитьB
, иB.rel
, чтобы получитьA
. - person Colton Allen   schedule 26.01.2016relationship
атрибутомinstance
, а не атрибутомclass
, как сейчас. Кстати, уберите префикс (a_
иb_
) - person Pynchia   schedule 26.01.2016classes
илиobjects
? - person Pynchia   schedule 26.01.2016Relationship
должен делать на практике? У меня ощущение, что это не нужно. Чего вы пытаетесь достичь? - person François Constant   schedule 26.01.2016B
и хочу узнать значение некоторого поля в объектеA
. Я могу добраться доA
, используя специальный атрибутB
. - person Colton Allen   schedule 26.01.2016marshmallow
. Вы определяете поля в объекте схемы. Эти поля сами являются объектами. Некоторые объекты представляют отношения в базе данных. Поскольку модели sqlalchemy связаны, я бы хотел, чтобы схемы были связаны аналогичным образом, чтобы я мог выполнить некоторую полезную проверку перекрестной схемы. - person Colton Allen   schedule 26.01.2016marshmallow
, но все равно ответил :) - person François Constant   schedule 26.01.2016