[PYTHON] Django-Modell: ManyToManyField

Modellbeispiel und Definition

Betrachten Sie als Beispiel einen Fußballspieler (Player) und seine Position (Position).

  1. Athleten können mehrere Positionen haben
  2. Es gibt mehrere Spieler auf derselben Position

In diesem Fall kommt ManyToMany ins Spiel.

Modellbeispiel


class Position(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=20, unique=True)


class Player(models.Model):
... (weggelassen) ...
    position = models.ManyToManyField(Position)

Nach der Migration von Django mithilfe der obigen Modelldefinition werden die folgenden drei Tabellen erstellt. image.png

Die Tabelle mit dem Namen player_position ist die PK der Spielertabelle und die PK der Positionstabelle. Die Informationen werden wie folgt verwaltet. image.png

Suchbeispiel

Extrahiere alle Positionen des Spielers "Pirlo"

positions = Player.objects.get(name='Pirlo').position.all()
[print(p.name) for p in positions]

Ausführungsergebnis:
DM
CM

Extrahiere alle Spieler in der Position "CB" (Methode 1)

players = Player.objects.filter(position=Position.objects.get(name='CB'))
[print(p.name) for p in players]

Ausführungsergebnis:
Maldini
Nesta

Extrahiere alle Spieler in der Position "CB" (Methode 2)

Modellbeispiel (Methode 2)


class Player(models.Model):
... (weggelassen) ...
    position = models.ManyToManyField(Position, related_name='player')
players = Position.objects.get(name='CB').player.all()
[print(p.name) for p in players]

Ausführungsergebnis:
Maldini
Nesta

Nachtrag

Methode 1 und Methode 2 sind Methoden 1 und 2, die alle Spieler an der Position "CB" extrahieren. Als ich jedoch die erstellte Abfrage überprüfte, generierten beide die folgende SQL.

SELECT "soccer_player"."id", "soccer_player"."name", "soccer_player"."team_id"
FROM "soccer_player"
INNER JOIN "soccer_player_position" ON ("soccer_player"."id" = "soccer_player_position"."player_id")
WHERE "soccer_player_position"."position_id" = 1

Recommended Posts

Django-Modell: ManyToManyField
Modelländerungen in Django
Hochleistungs-Django - Modell
Django Model Field Customization Verschiedene
Django
Verwenden Sie das Django-Modell vom Interpreter
Zeigen Sie Django ManyToManyField in der Vorlage
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
Linke äußere Verbindung im Django-Modell
Generieren Sie automatisch ein Modellbeziehungsdiagramm mit Django
Django-Update
Django Note 4
Django: Die Migration spiegelt nicht das Modell in der Datenbank wider
Entwicklung einer WEB-Anwendung mit Django [Modelldefinition]
Django Memorandum
Django-Suche
Django Zusammenfassung
Django-Test
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Django # 2 (Vorlage)
Django Note 5
Django zum Anfassen
Berühre Django
Django Memo
Django Zusammenfassung
Django Grundlagen
Django Shoho
Django Grundeinstellungen
Django + Docker
Holen Sie sich ein Referenzmodell mit Django Serializer
Django Glossar
Django Installation
Django: Referenzen
Django Note 1
Django Note 3
Django Note 2
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Django-Start
Django Memo
Django NullCharField
Django Tutorial Zusammenfassung für Anfänger von Anfängern ② (Model, Admin)
[django] Wenn das geänderte Modell aktualisiert wird und wenn es nicht aktualisiert wird