我有一个名为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()