Django的ManyToManyField之间指向的两个对象

时间:2019-01-11 20:26:12

标签: python django python-3.x django-models

在我的项目中,我有2个模型,它们具有指向彼此的ManyToMany字段。在这种情况下,我有选举和候选人。这个想法是,一个选举可以有多个候选人,并且一个候选人也可以是多个选举的一部分(一个“候选人”只有一个人)。

我有以下内容:

project / elections / models.py

from candidates.models import Candidate

class Election(models.Model):
    candidates = models.ManyToManyField(Candidate)
    ...

project / candidates / models.py

from elections.models import Election
    elections = models.ManyToManyField(Election)
    ...

当我尝试运行任何命令(makemigrations,runserver等)时,我在Election和Candidate之间遇到循环依赖关系,从而崩溃。我将不同应用程序中的模型作为编码实践。

  

我应该:

     
      
  1. 将两个模型都移动到一个应用程序和一个文件

  2.   
  3. 模型没有相互指向(我该如何实现目标?)

  4.   
  5. 做一些不同的事情

  6.   

2 个答案:

答案 0 :(得分:0)

为避免循环依赖,请不要导入模型,而应使用字符串,并将应用程序名称包含为名称空间

project / elections / models.py

class Election(models.Model):
    candidates = models.ManyToManyField('candidates.Candidate')

更新

正如django文档所指出的那样,您只需要在其中一个模型https://docs.djangoproject.com/es/2.1/topics/db/models/#many-to-many-relationships上声明该关系

  

哪个模型具有ManyToManyField没关系,但是您应该   只能将其放在其中一个模型中-不能同时放在两个模型中。

答案 1 :(得分:0)

不需要这样做。多对多字段已经是双向的。只需在 one 一侧定义它,然后使用相反的关系即可。