【发布时间】:2016-12-20 19:42:27
【问题描述】:
我有一个使用 MongoEngine 作为数据库的 Python/Flask 应用程序。我已经定义了我的模型,并且在添加最新模型之前一切正常。我相信问题的发生是因为两个模型相互引用并且导致递归导入循环。我不知道该怎么做才能解决它。这将是一个大型项目,有许多相互引用的模型。这个特殊的例子是因为用户在实践中,实践中有用户,所以是多对多的关系。
用户模型
from utilities.common import utc_now_ts as now
from mongoengine import *
from models.practice import Practice
class User(Document):
name = StringField()
created = IntField(db_field="cr", default=now)
practices = ListField(ReferenceField(Practice))
以及实践模式
from utilities.common import utc_now_ts as now
from mongoengine import *
from models import user
class Practice(Document):
name = StringField()
created = IntField(db_field="cr", default=now)
users = ListField(ReferenceField(user.User))
admins = ListField(ReferenceField(user.User))
我得到的错误是ImportError: cannot import name 'Practice'
我还有两个遇到相同问题的模型。在我将导入添加到另一个模型之前,这些模型运行良好。
【问题讨论】:
-
是否有递归引用它们的原因?解决此问题的最佳方法很可能是模型重构以删除其中一个依赖项。
-
你能告诉我如何改变它吗?我需要为每个模型创建一个用户列表,并且我需要为每个用户创建一个组列表。这是我搜索该主题时人们推荐的方法。
标签: python recursion flask python-import mongoengine