【问题标题】:Django ManyToManyField between 2 objects that point to one another2个相互指向的对象之间的Django ManyToManyField
【发布时间】:2019-01-11 20:26:12
【问题描述】:

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

我有以下几点:

项目/选举/models.py

from candidates.models import Candidate

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

项目/候选人/models.py

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

当我尝试运行任何命令(makemigrations、runserver 等)时,我得到了 Election 和 Candidate 之间的循环依赖关系,它崩溃了。我有不同应用程序中的模型作为编码练习。

我应该:

  1. 将两个模型移至一个应用和一个文件

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

  3. 做一些不同的事情

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      项目/选举/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 并不重要,但你应该 只将其放入其中一个模型中 - 而不是两者。

      【讨论】:

      • 虽然这样可以解决OP的错误,但不是正确的解决方案。
      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 2019-08-17
      • 2019-07-18
      • 2017-11-04
      • 1970-01-01
      • 2016-06-05
      相关资源
      最近更新 更多