【问题标题】:How do I avoid Circular references when they are heavily needed?当非常需要循环引用时,如何避免它们?
【发布时间】:2016-02-11 15:31:23
【问题描述】:

我声明了需要在两个模型的模块中使用数据库关系的模型,这会导致 “无法导入名称 Region” 错误。 为了更好地说明这一点,这是我的示例模型

项目/位置/models.py

from project.location.models import Region

class Project(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(175), unique=True, nullable=False)
    region = db.Column(db.Integer, db.ForeignKey('regions.id'))
    regions = db.relationship(Region, backref='projects')

从下一个模块开始,
项目/可交付成果/模型

from project.deliverables.models import Project

class Region(db.Model):
    name = db.Column(db.String(30))
    id = db.Column(db.Integer, primary_key=True)
    projects = db.relationship("Project", backref='regions')

我怎样才能最好地避免循环导入,以便将来的模型声明不会被这种现象纠缠?

【问题讨论】:

  • 那么,一个项目在一个区域中?我不明白为什么一个区域会引用一个项目。
  • 他们都在相关模型 Project.region.name 和 Region.project.names 上使用 db.relationship。包含它们所属区域的内容。并从特定地区选择项目。
  • 您已经切换了导入语句。 from project.location.models import Region 应该是 from project.deliverables.models import Region,对吧?另一个也一样
  • 除此之外-也许可以看到这篇文章-stackoverflow.com/questions/15547156/…
  • @cricket_007 的链接就是答案,但为了明确起见,用字符串定义关系,这样您就不需要导入任何东西 db.relationship('Region', backref='projects')。

标签: python flask sqlalchemy flask-sqlalchemy flask-wtforms


【解决方案1】:

我让它工作了,在这种情况下,我必须引用模型名称而不是使用它们的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    相关资源
    最近更新 更多