2017-01-25 8 views
3

私は多対多の関係を持つモデルを作成しようとしていますが、この関係には関係に関する情報が格納される特定の表もありますが、いくつかの問題に遭遇している。なぜ多対多関係が対称でないのですか

私はDjango docsのような異なるモデルと多対多の関係を作りようとしましたが、私のアプリケーションの他のいくつかの点でうまくいきました。しかし、今私はこのようなことをしようとしました:

他のアイテムによって作られ、他のアイテムを作るために使われるオブジェクト(Itemと呼ばれる)を表すモデルが必要です。たとえば、オブジェクトDoorは木とロックで作成されますが、DoorはHouseを作成するためにも使用されます。エラーが停止し、私の関係の引数

symmetrical=False 

を追加し、そう

Many-to-many fields with intermediate tables must not be symmetrical. 

:私は私のモデル

class Item(models.Model): 
    name = models.CharField(max_length=100) 
    items = models.ManyToManyField("self",through='IsMadeBy') 

class IsMadeBy(models.Model): 
    itemResult = models.ForeignKey('Item', related_name='itemResult') 
    itemPart = models.ForeignKey('Item', related_name='itemPart') 
    amountUsed = models.PositiveIntegerField() 

私は、エラーメッセージが出ていため、このような何かに思いました。

これが言われているように、私はこれが実際にどのように実際に機能するのか知りたい。 intanceについては、この文脈でデータベースレベルで対称的な意味は何ですか?今のところ私の脳は全体的な状況を見ることができず、実際には多対多の関係でこの対称関係の概念を学ぶことができるので、誰かがSQL文を使って例を挙げることができれば幸いです。 Djangoのドキュメントで

答えて

0

ルック: https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

対称の関係で私はあなたがあまりにもその後、私の友人の友人だ場合 - Djangoの用語では、1体の関係を持っています。

非対称の直接的な関係と逆の関係は異なる可能性があります。あなたはrelated_setを持っています。たとえば、私があなたのマネージャーである場合、あなたは同時に私のマネージャーではありませんが、employee_set経由のマネージャーは多くの従業員を持つことができます。