我有以下文件:
...
from models.company import Company
class User(BaseModel):
company = ForeignKeyField(Company, ...)
...
...
from models.user import User
class Company(BaseModel):
user = ForeignKeyField(User, ...)
...
就python而言,这是正常的循环导入错误。问题是通常的解决方法(将import语句放在文件末尾,以不同的方式导入等)在这种情况下不起作用,因为我在类属性的定义中使用了一个类另一个班级。
在这种情况下解决周期性导入错误的正确方法是什么?
答案 0 :(得分:0)
事实证明,正如@PatrickHaugh指出的那样,这实际上不可能:
请注意,您不能在编写它们的同一个文件中同时定义它们。当您执行第一个定义时,它将失败,因为无论您先定义哪个类,都尚未定义另一个类的名称。 ForeignKeyField来自哪个框架?它可能具有避免此问题的工具。
由于我使用peewee作为我的ORM,因此为此目的建立了一个特殊的字段:DeferredForeignKey
。
因此,最终,解决方案是:
...
from models.company import Company
class User(BaseModel):
company = ForeignKeyField(Company, ...)
...
...
class Company(BaseModel):
user = DeferredForeignKey('User', ...)
...