我有两个应用程序说app1和app2,我有模型。
from app2.models import SecondModel
class FirstModel(models.Model):
first_field = models.ManyToManyField(SecondModel, blank=True)# or Foreign Key
from app1.models import FirstModel
class SecondModel(models.Model):
second_field = models.ForeignKey(FirstModel)
当我这样做时,我得到导入错误。
无法导入名称'FirstModel'
为什么会这样?
答案 0 :(得分:1)
错误是因为您有循环导入。两个模块都无法相互导入。
在这种情况下,您无需将模型导入每个应用程序。删除导入,改为使用字符串app_label.ModelName
。
# app1.models.py
class FirstModel(models.Model):
first_field = models.ManyToManyField('app2.SecondModel')
# app2.models.py
class SecondModel(models.Model):
second_field = models.ForeignKey('app1.FirstModel')
答案 1 :(得分:1)
此处存在名称冲突..您在models.py中定义了FirstModel
,然后在上面的代码中定义了FirstModel
,这可能是可能出现的问题。此外,导入错误通常意味着,没有从导入位置定义FirstModel。
然而,一种更通用的方法是在没有导入的情况下进行FK通常是
class FkModel(models.Model):
relationship = models.ManyToManyField('appName.modelName')
其中appName是您尝试从中导入模型的应用程序,而modelName是您尝试创建关系的模型。这有助于你尝试做这样的事情。
让我们说你的应用名称是' app'并且您正在尝试创建从第一个模型到第二个模型的多对多关系,例如,在第一个模型之后声明该类,例如。
class Model1(models.Model):
first_field = models.ManyToManyField('app.Model1')
class Model2(models.Model):
name = models.CharField(maxlength=256)
只是将你的appname.modelName放在字符串中:)
另外,您的ManyToManyField()
声明中存在缺陷,即您不需要在多对多中定义空白。 db的工作方式是,他们创建了一个第三个数据库表,只是为了存储多对多的关系。
希望有所帮助
//鼠标。