我有一个名为 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()
关于python - 在 ManyToManyField 中使用交叉引用时出现 Django NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21190341/