Django m2m场与另一个m2m场对称

时间:2013-02-20 18:39:27

标签: python django django-models django-admin django-orm

我想在两个不同的m2m字段之间进行自动关系绑定。以下是我所需工作流程的示例:

  1. 创建一个标签"绿色"
  2. 创建标签"颜色"并标记"格林"作为一个孩子
  3. 现在,当我回到" Green"标签面板需要有"颜色"在父母中
  4. 不幸的是,它不是那么简单,我无法想出任何东西。我尝试将对称设置为True但它只是做了不必要的循环("绿色"不是#34;颜色&#34的父级!)

    # 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
        )
    

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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