:
あなたが唯一の なピザとトッピングを混合し、一致するような単純な多対多の関係を扱っている場合は、標準のManyToManyField はあなたが必要とするすべてです。ただし、データ と2つのモデル間の関係を関連付ける必要が生じることがあります。
要するに
:あなたが単純な関係を持っている場合は、多くの-To_Manyフィールドは(あなたのための余分なテーブルを作成し、管理して)良いです。複数の追加情報が必要な場合は、外部キーを使用して独自のモデルを作成します。それは本当に状況に依存します。
アップデート: - 要求されたとして例:ドキュメントから
:
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
あなたはメンバーシップの詳細(
date_joined
と
invite_reason
が)多対に加えて、保管されていることをこの例を見ることができます
多対多関係。
しかしドキュメントからの簡単な例に:
class Topping(models.Model):
ingredient = models.CharField(max_length=128)
class Pizza(models.Model):
name = models.CharField(max_length=128)
toppings = models.ManyToManyField(Topping)
余分なデータも必要となり、余分なモデルが存在しないようです。
アップデート2: -
関係を削除する方法の一例。
最初の例で私はこの特別なモデルを持っていましたMembership
あなたは通常のモデルのような関係とその詳細を削除するだけです。
for membership in Membership.objects.filter(person__pk=1)
membership.delete()
Viola!やさしい。
あなたは(すべてを削除するか、
.clear()
)
.remove()
を使用する必要がある第二の例の場合
:
apple = Toppings.objects.get(pk=4)
super_pizza = Pizza.objects.get(pk=12)
super_pizza.toppings.remove(apple)
super_pizza.save()
そして、その一つが、あまりにも行われます!
答えを見つけましたか? –