Stellen Sie eine Eins-zu-Viele-Beziehung in Django dar

Vaibhav Vaibhav 8 Oktober 2023
  1. Stellen Sie eine Eins-zu-Viele-Beziehung mit einem Kreuzungs-/Zwischenmodell dar
  2. Stellen Sie eine zu vielen Beziehungen mit Fremdschlüsseln dar
Stellen Sie eine Eins-zu-Viele-Beziehung in Django 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.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.