0

2 つの異なる m2m フィールド間の自動リレーション バインディングが必要です。これが私の希望するワークフローの例です。

  1. タグ「グリーン」を作成
  2. タグ「Colors」を作成し、「Green」を子としてマークします
  3. ここで、"Green" タグ パネルに戻ると、親の間で "Colors" が必要です

残念ながら、それはそれほど単純ではなく、何も思いつきません。対称をTrueに設定しようとしましたが、不要なループを作成しているだけです(「緑」は「色」の親ではありません!)

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

手伝ってくれてありがとう。

4

1 に答える 1

2

あなたがやろうとしていることは、単一のM2M関係で達成できると私は信じています。対称のドキュメントを確認してください。1つの非対称フィールドを定義する場合は、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
于 2013-02-21T01:30:40.783 に答える