Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在ManyToManyField中使用交叉引用时出现Django名称错误_Python_Django_Manytomanyfield - Fatal编程技术网

Python 在ManyToManyField中使用交叉引用时出现Django名称错误

Python 在ManyToManyField中使用交叉引用时出现Django名称错误,python,django,manytomanyfield,Python,Django,Manytomanyfield,我有一个名为models的包,在这个包中,我有几个单独的python文件中的模型。具体而言,目录结构如下所示: models/ __init__.py model1.py model2.py models/ __init__.py model1.py model2.py from models import Model1, Model2 在\uuuu init\uuuuu.py中: from model1 import Model1 from

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

models/
    __init__.py
    model1.py
    model2.py
models/
    __init__.py
    model1.py
    model2.py
from models import Model1, Model2
\uuuu init\uuuuu.py
中:

from model1 import Model1
from model2 import Model2
from django.db import models
from model2 import Model2

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

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

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

class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1
model1.py
中:

from model1 import Model1
from model2 import Model2
from django.db import models
from model2 import Model2

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

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

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

class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1
model2.py
中:

from model1 import Model1
from model2 import Model2
from django.db import models
from model2 import Model2

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

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

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

class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1
通过将
import
移动到每个文件的末尾,下面的解决方案可以消除NameError,但我无法从其他地方导入模型

\uuuu init\uuuuu.py
中:

from model1 import Model1
from model2 import Model2
from django.db import models
from model2 import Model2

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

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

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

class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1
model1.py
中:

from model1 import Model1
from model2 import Model2
from django.db import models
from model2 import Model2

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

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

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

class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1
model2.py
中:

from model1 import Model1
from model2 import Model2
from django.db import models
from model2 import Model2

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

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

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

class Model2(models.Model):
    field1 = models.ManyToManyFiled(Model1)
from model1 import Model1
我希望从其他地方使用以下代码导入模型:

models/
    __init__.py
    model1.py
    model2.py
models/
    __init__.py
    model1.py
    model2.py
from models import Model1, Model2
有什么优雅的方法可以解决这个问题吗?

看看。 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()

Django准备使用单个模型文件-每个应用程序-是否不可能将Model1和Model2放在models.py文件中?据我所见,pythonI中的循环模块依赖性不好,它还试图将
Model1
Model2
放在单个
models.py
中。在这种情况下,
Model1
Model2
是交叉引用的,然后在执行
python manage.py syncdb
时,我得到
namererror
(我使用的是django 1.6.x),您必须将类的名称放在引号中,这样django就可以延迟加载it@Alvaro:它很有效,谢谢!但我最终修改了数据库设计,放弃了ManyToManyField,这不是必须的。完全同意。可能需要补充的是,如果同一文件中有循环外键,则可以将模型的名称放在引号中