Python 递归导入问题
Python recursive import issue
我有一个使用 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'
我有两个其他模型 运行 属于同一问题。在我将导入添加到另一个模型之前,这些模型工作正常。
简短的回答是不能有循环引用。编译器不相信您会 "bottom out" 正确解析引用,它不会遍历图表来找出答案。
解决此问题的一种方法是使用导入各种 classes 的主 class;你的工人 classes 然后从主人 class.
那里导入他们的需求
我绝不是 MongoEngine 专家,但看起来您可以通过字符串而不是 class 来引用模型。在这种情况下,您可以将 Practice
模型更改为如下所示。
from utilities.common import utc_now_ts as now
from mongoengine import *
class Practice(Document):
name = StringField()
created = IntField(db_field="cr", default=now)
users = ListField(ReferenceField('User'))
admins = ListField(ReferenceField('User'))
希望对您有所帮助。
我有一个使用 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'
我有两个其他模型 运行 属于同一问题。在我将导入添加到另一个模型之前,这些模型工作正常。
简短的回答是不能有循环引用。编译器不相信您会 "bottom out" 正确解析引用,它不会遍历图表来找出答案。
解决此问题的一种方法是使用导入各种 classes 的主 class;你的工人 classes 然后从主人 class.
那里导入他们的需求我绝不是 MongoEngine 专家,但看起来您可以通过字符串而不是 class 来引用模型。在这种情况下,您可以将 Practice
模型更改为如下所示。
from utilities.common import utc_now_ts as now
from mongoengine import *
class Practice(Document):
name = StringField()
created = IntField(db_field="cr", default=now)
users = ListField(ReferenceField('User'))
admins = ListField(ReferenceField('User'))
希望对您有所帮助。