Stellen Sie eine Eins-zu-Viele-Beziehung in Django dar
- Stellen Sie eine Eins-zu-Viele-Beziehung mit einem Kreuzungs-/Zwischenmodell dar
- Stellen Sie eine zu vielen Beziehungen mit Fremdschlüsseln dar
Datenbanken spielen fast überall eine Schlüsselrolle, und es ist keine Überraschung, dass die Webentwicklung ein solcher Ort ist. Das Erstellen von Tabellen und das Einrichten von Beziehungen zwischen Tabellen mit SQL ist eine einfache Aufgabe, aber Django macht es noch einfacher.
In diesem Artikel wird vorgestellt, wie man eine zu vielen Beziehungen in Django darstellt.
Stellen Sie eine Eins-zu-Viele-Beziehung mit einem Kreuzungs-/Zwischenmodell dar
Beachten Sie die Definitionen der folgenden Modelle.
class Number(models.Model):
number = models.CharField(max_length=10)
class Person(models.Model):
name = models.CharField(max_length=200)
class PersonNumber(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE, related_name="numbers")
number = models.ForeignKey(Number, on_delete=models.CASCADE, related_name="person")
Das Modell Number
hat ein Feld number
zum Speichern einer Telefonnummer.
Das Modell Person
hat ein Feld name
für den Namen der Person.
PersonNumber
ist ein Kreuzungs- oder Vermittlungsmodell für Number
und Person
. Die Fremdschlüssel haben eine kaskadierende Beziehung zu den referenzierten Objekten. Dieses Modell kann verwendet werden, um eine Eins-zu-Viele-Beziehung sowie eine Viele-zu-Viele-Beziehung einzurichten.
Der Standard-Primärschlüssel für alle Modelle ist id
, ein Integer-Auto-Feld.
Da eine Telefonnummer nur einer einzelnen Person zugeordnet ist, eine Person jedoch mehrere Telefonnummern haben kann, handelt es sich um eine Eins-zu-Viele-Beziehung. PersonNumber
wird verwendet, um diese Beziehung darzustellen.
Wenn eine Variable person
ein Person
-Objekt speichert, können wir mit der folgenden Anweisung einfach auf alle Telefonnummern dieser Person zugreifen.
numbers = person.numbers.objects.all()
Diese Anweisung gibt ein QuerySet
von Number
-Objekten zurück.
Betrachten Sie dieses Beispiel.
ID | Person | Number |
---|---|---|
1 | 1 | 1 |
2 | 1 | 2 |
3 | 1 | 3 |
4 | 1 | 4 |
5 | 2 | 5 |
6 | 2 | 6 |
7 | 3 | 7 |
Eine Person mit id
1
hat vier Telefonnummern mit id
1
, 2
, 3
und 4
.
Eine Person mit id
2
hat zwei Telefonnummern mit id
5
und 6
.
Eine Person mit id
3
hat nur eine Telefonnummer mit id
7
.
Stellen Sie eine zu vielen Beziehungen mit Fremdschlüsseln dar
Beachten Sie die Definitionen der folgenden Modelle.
class Person(models.Model):
name = models.CharField(max_length=200)
class Number(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
number = models.CharField(max_length=10)
Das Modell Person
hat ein Feld name
für den Namen der Person.
Das Modell Number
hat ein Feld number
zum Speichern einer Telefonnummer und eine Fremdschlüsselreferenz zum Modell Person
. Dieses Feld würde den Besitzer dieser Nummer speichern. Der Fremdschlüssel hat eine kaskadierende Beziehung zum referenzierten Modell Person
.
Mit dieser Struktur können wir jedes Number
-Objekt einfach über die Fremdschlüssel-Referenz seinem jeweiligen Besitzer zuordnen.
Wenn eine Variable person
ein Person
-Objekt speichert, können wir mit der folgenden Anweisung auf alle Nummern zugreifen, die dieser Person zugeordnet sind.
numbers = Number.objects.filter(person=person)
Diese Anweisung gibt ein QuerySet
von Number
-Objekten zurück.