繁体   English   中英

sqlalchemy 中的 models.py 强制 class 关系高于被引用的 class

[英]models.py in sqlalchemy forces class relationships to be above the class being referenced

我的 python 类被迫在我的 models.py 中定义在试图使用它们的类之上。 这很好,除了我有一些我无法形成的双向关系,因为它们相互引用。

模型.py

class Language(Updateable, db.Model):
    __tablename__ = 'language'

    id = sqla.Column(sqla.Integer, primary_key=True)
    language = sqla.Column(sqla.String(2), nullable=False)

    type_id = sqla.Column(sqla.Integer, sqla.ForeignKey(Type.id), index=True)
    type = sqla_orm.relationship('Type', back_populates='translated_languages')

    #This will complain that 'Type' was not defined prior to this class
    types = sqla_orm.relationship('Type', back_populates='language', UserList=False)


class Type(Updateable, db.Model):
    __tablename__ = 'type'

    id = sqla.Column(sqla.Integer, primary_key=True)

    translated_languages = sqla_orm.relationship('Language', back_populates='type')

    language_id = sqla.Column(sqla.Integer, sqla.ForeignKey(Language.id), index=True)
    language = sqla_orm.relationship('Language', back_populates='types')

问题是ForeignKey实例; 通常它们被引用为,而不是模型,并作为字符串传递,因为表可能还不存在,或者可能尚未映射到 model class。 此外,关系关键字参数UserList应该是uselist

class Language(Base):
    __tablename__ = 'language'

    id = sqla.Column(sqla.Integer, primary_key=True)
    language = sqla.Column(sqla.String(2), nullable=False)

    type_id = sqla.Column(sqla.Integer, sqla.ForeignKey('type.id'), index=True)
    type = sqla_orm.relationship('Type', back_populates='translated_languages')

    # This will complain that 'Type' was not defined prior to this class
    types = sqla_orm.relationship('Type', back_populates='language', uselist=False)


class Type(Base):
    __tablename__ = 'type'

    id = sqla.Column(sqla.Integer, primary_key=True)

    translated_languages = sqla_orm.relationship('Language', back_populates='type')

    language_id = sqla.Column(sqla.Integer, sqla.ForeignKey('language.id'), index=True)
    language = sqla_orm.relationship('Language', back_populates='types')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM