保存前Django模型与两个模型的关系

2024-09-29 05:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个应用程序说,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”

为什么会这样?你知道吗


Tags: from模型import应用程序fieldmodelmodelsclass
2条回答

错误是因为您有一个循环导入。两个模块不可能相互导入。你知道吗

在这种情况下,您不需要将模型导入每个应用程序。删除导入,改为使用字符串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')

这里有名字冲突。。您在型号.py然后定义了FirstModel,根据上面的代码,这可能是个问题。此外,导入错误通常意味着,没有从导入它的位置定义FirstModel。你知道吗

但是,不导入FKs的更通用方法通常是

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()声明中有一个缺陷,即您不需要在多对多中定义blank。db的工作方式是,他们创建第三个数据库表来存储多对多关系。你知道吗

希望有帮助

//鼠标。你知道吗

相关问题 更多 >