2017-01-25 3 views
3

Ich versuche, ein Modell mit vielen zu vielen Beziehung zu sich selbst zu machen und diese Beziehung wird auch eine bestimmte Tabelle, die einige Informationen über die Beziehung speichern wird, aber ich Ich habe Probleme.Warum viele zu viele Beziehung mit Selbst kann nicht symmetrisch

Ich habe versucht, eine viele zu viele Beziehung mit verschiedenen Modellen wie der Django docs sagen, und es funktioniert gut in einem anderen Punkt meiner Anwendung. Aber jetzt habe ich versucht, etwas wie folgt zu tun:

Nehmen wir an, ich möchte ein Modell, das ein Objekt (genannt Artikel) darstellt, das von anderen Elementen gemacht wird und auch verwendet wird, um einige andere Elemente zu machen. Zum Beispiel ist ein Objekt Tür aus Holz und Schloss, aber Tür wird auch verwendet, um ein Haus zu machen. Ich dachte, in so etwas für meine Modelle

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

Ich erhalte die Fehlermeldung:

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

So, das Hinzufügen des Arguments

symmetrical=False 

meine Beziehung der Fehler anhält.

Mit diesem gesagt, möchte ich wissen, wie das wirklich unter der Haube funktioniert. Was bedeutet in diesem Zusammenhang das Symmetrische in einer Datenbankebene? Ich würde mich freuen, wenn jemand Beispiele geben könnte, vielleicht mit SQL-Anweisungen, denn im Moment kann mein Gehirn die Gesamtsituation nicht sehen und wirklich dieses Konzept der symmetrischen Beziehung in einer Beziehung von vielen zu vielen mit sich selbst lernen.

Antwort

0

Blick auf die Django-Dokumentation: https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ManyToManyField.symmetrical

Bei der symmetrischen Beziehung, wenn ich bin dein Freund dann auch du mein Freund - in Django Bedingungen, haben Sie eine Beziehung.

Mit unsymmetrischen direkten und umgekehrten Beziehungen kann unterschiedlich sein, Sie haben related_set. Zum Beispiel, wenn ich Sie Manager bin, sind Sie nicht mein Manager zur gleichen Zeit, aber Manager über employee_set kann viele Mitarbeiter haben.