python - 在 ManyToManyField 中使用交叉引用时出现 Django NameError

标签 python django 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()

关于python - 在 ManyToManyField 中使用交叉引用时出现 Django NameError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21190341/

相关文章:

django - 根据 Django Admin 中的父模型预填充内联

angularjs - Django Rest Framework 与其自身相关的多对多字段

python - 带有 ManyToMany 的 Django QuerySet 被传递给自定义序列化程序

python - 检查第二列的条件后如何删除某些值?

python - 使用 Python 计算 OpenCV 库的检测次数

python - sklearn 的 MLP predict_proba 函数在内部是如何工作的?

python - 如何在 python 中使用 pandas 读取 csv 文件的所有行?

Django、Create-react-app、Heroku

python - 一种在 Django 上显示/隐藏字段的方法

python - 在 Django Admin 中将 ManyToManyField 显示为复选框