关于python:与另一个m2m字段对称的Django m2m字段

Django m2m field symmetrical to another m2m field

我想在两个不同的m2m字段之间建立自动的关系绑定。这是我所需的工作流程的一个示例:

  • 创建一个标签"绿色"
  • 创建一个"颜色"标签,并将"绿色"标记为子级
  • 现在,当我回到"绿色"标签面板时,需要在父母之间添加"颜色"
  • 不幸的是,这不是那么简单,我什么也没想出来。我尝试将"对称"设置为" True",但这只是造成不必要的循环("绿色"不是"颜色"的父项!)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # my models.py
    class Tag(models.Model):
        ...
        children = models.ManyToManyField(
            'self',
            blank=True,
            related_name="kids",
            symmetrical=False
        )
        parents = models.ManyToManyField(
            'self',
            blank=True,
            related_name="folks",
            symmetrical=False
        )

    感谢您的帮助。


    我相信您想要做的事情可以通过一个M2M关系来完成。查看对称文件。如果定义一个非对称字段,则可以使用related_name参数来定义另一个关系:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Tag(models.Model):
      name = models.TextField()
      children = models.ManyToManyField(
          'self',
          blank=True,
          related_name="parents",
          symmetrical=False
      )

    green = Tag.objects.create(name='green')
    color = Tag.objects.create(name='color')
    color.children.add(green)
    color in green.parents.all() # True