人们如何解决这个问题:
控制器(比如controller.py)导入两个模型(比如a_model.py和b_model.py):
from app.model import a_model
from app.model import b_model
现在让我们说a_model想要在b_model中使用一个函数(假设它想从b_model获取一些东西,其中记录的id
来自a_model中的查询,所以我做(在a_model中):
from app.model import b_model
既然我们的控制器已经导入了b_model.py并且a_model.py试图这样做,我们就会破坏应用程序。
有人可以告诉我最好的方法吗?也许使用代理?还是图书馆装载机?
答案 0 :(得分:6)
从Python中的两个不同模块导入模块没有问题。也许你的特定设计使它成为一个问题,但它不是Python所强加的。
无论如何,您可以通过将常见内容从a_model
和b_model
移动到其他模块(即model_common
)并从a_model
和b_model
导入来解决问题。 {{1}}。
答案 1 :(得分:4)
只要您没有cicrcular引用即可,即
main --> model.a_model -> model.b_model
\-> model.b_model
没关系。
但是如果你从import a_model
添加b_model.py
,事情会变得复杂,因为没有办法以这样的方式订购加载,即每个模块都会满足所有先决条件。
Python不像人们期望的那样处理这种情况,而不是报告循环导入,在其中一个模块中引发了有关未定义符号的异常。
答案 2 :(得分:1)
这是你想要做的吗?
class A(db.Model):
b = db.ReferenceProperty(B)
class B(db.Model):
a = db.ReferenceProperty(A)
如果是这样,那么简单的解决方法可能是将其中一个变为弱引用:
class A(db.Model):
b = db.ReferenceProperty()
class B(db.Model):
a = db.ReferenceProperty(A)
毫无疑问,这是一个糟糕的解决方案。我不确定是否有更好的方法。