Django NameError 在 ManyToManyField 中使用交叉引用时出错



我有一个名为models的软件包,其中我有几个模型在单独的python文件中。具体而言,目录结构如下:

models/
    __init__.py
    model1.py
    model2.py

__init__.py

from model1 import Model1
from model2 import Model2

model1.py

from django.db import models
from model2 import Model2
class Model1(models.Model):
    field2 = models.ManyToManyFiled(Model2)

model2.py

from django.db import models
from model1 import Model1
class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)

以下解决方案通过将import移动到每个文件的末尾可以消除NameError,但我无法从其他地方导入模型

models/
    __init__.py
    model1.py
    model2.py

__init__.py

#from model1 import Model1
#from model2 import Model2

model1.py

from django.db import models
class Model1(models.Model):
    field2 = models.ManyToManyFiled(Model2)
from model2 import Model2

model2.py

from django.db import models
class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1

我想从其他地方使用代码导入模型,如下所示:

from models import Model1, Model2

有什么优雅的方法可以解决这个问题吗?

看看 https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/。ManyToManyField 必须只存在于一个模型中,然后在另一个模型中创建一个隐式集,并且可以使用后缀 _set 访问。您将拥有:

class Model1(models.Model):
    field2 = models.ManyToManyField(Model2)
class Model2(models.Model):
    pass  
a = Model1()
b = Model2()
a.field2.add(b)
# Access the sets with:
a.field2.all()
b.model1_set.all()

相关内容

  • 没有找到相关文章

最新更新