Django ArrayField
-
Verwenden Sie
ArrayField, um ein eindimensionales Array in Django-Modellen hinzuzufügen -
Verwenden Sie
ArrayField, um ein mehrdimensionales Array in Django-Modellen zu erstellen
Das ArrayField in Django ähnelt einer Array-Datenstruktur in anderen Programmiersprachen wie Java, C, C++ usw. Es speichert mehrere Werte desselben Datentyps.
Bevor wir mit dem Arrayfield in Django fortfahren, sollte der Benutzer bestätigen, dass er PostgreSQL als Datenbank verwendet, da die SQLite-Datenbank Arrayfield nicht unterstützt.
Um die Datenbank PostgreSQL einzurichten, sollten Benutzer den Server von PostgreSQL lokal ausführen. Um es danach mit Django zu verbinden, müssen Benutzer in der Datei settings.py der Anwendung das Array DATABASES ändern, wie unten gezeigt.
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": "<DATABASES_name>",
"USER": "<USER_name>",
"PASSWORD": "<PASSWORD_of_user>",
"HOST": "localhost",
"PORT": "5432",
}
}
In der folgenden Abbildung können Benutzer sehen, wie wir PostgreSQL in der Datei settings.py eingerichtet haben.

Verwenden Sie ArrayField, um ein eindimensionales Array in Django-Modellen hinzuzufügen
In diesem Abschnitt werden wir das ArrayField verwenden, um dem Django-Modell ein Array von Werten hinzuzufügen. Das folgende Beispiel zeigt die Verwendung von ArrayField, um das Array von TextField zu erstellen.
from django.db import models
from django.contrib.postgres.fields import ArrayField
class ResearchPaper(models.Model):
paperName = models.CharField(max_length=200)
author = ArrayField(models.CharField(max_length=200), blank=True)
def __str__(self):
return self.paperName
Wir haben das Django-Modell für das ResearchPaper im obigen Python-Code erstellt. Es enthält die Felder paperName und Authors.
Das Feld paperName ist das normale Zeichenfeld, aber es kann mehrere Autoren für eine einzelne Arbeit geben, daher haben wir das ArrayField verwendet, um das Feld Authors zu erstellen.
Sobald wir das Modell in der Datei models.py hinzugefügt haben, müssen wir das Modell registrieren. Um das Modell zu registrieren, erstellen Sie admin.py, falls es nicht existiert, und fügen Sie den folgenden Code zur Datei hinzu.
from .models import ResearchPaper
admin.site.register(ResearchPaper)
Nach der Registrierung des Modells müssen Benutzer das Modell in die Datenbank migrieren. Dazu müssen Benutzer den folgenden Befehl nacheinander im Terminal ausführen.
python manage.py makemigrations <app_name>
python manage.py migrate
Nun lernen wir, die Daten aus dem ArrayField nach ihrem Wert abzufragen.
Bevor wir mit der Abfrage der Daten aus der Tabelle ResearchPaper beginnen, fügen wir einige Daten hinzu.
ResearchPaper.objects.create(paperName="First paper", author=["Alice", "Bob", "jenny"])
ResearchPaper.objects.create(paperName="Second paper", author=["Alice"])
ResearchPaper.objects.create(paperName="Third paper", author=["Bob"])
ResearchPaper.objects.create(paperName="Fourth paper", author=["Alice", "Bob"])
ResearchPaper.objects.create(paperName="Fifth paper", author=["Bob", "jenny"])
Daher haben wir einige Aufzeichnungen von Forschungsarbeiten mit verschiedenen Autoren hinzugefügt. Außerdem haben einige Artikel mehrere Autoren, und ein einzelner Autor hat mehrere Artikel geschrieben.
Im folgenden gif können wir sehen, dass Daten zur Datenbank hinzugefügt werden.

Verwenden Sie die enthält-Suche
Die contains-Suche gibt alle Datensätze zurück, deren Lookup-Werte eine Teilmenge der ArrayField-Daten sind.
Beispielcode:
ResearchPaper.objects.filter(
author__contains=["Alice"]
) # returns <QuerySet [<ResearchPaper: First paper>, <ResearchPaper: Second paper>, <ResearchPaper: Fourth paper>]>
ResearchPaper.objects.filter(
author__contains=["Alice", "Bob"]
) # returns <QuerySet [<ResearchPaper: First paper>, <ResearchPaper: Fourth paper>
Ausgang:

Verwenden Sie die contained_by-Suche
Die contained_by-Suche ist die Umkehrung der contains-Suche. Es gibt alle Datensätze zurück, deren Daten eine Teilmenge von Nachschlagewerten sind.
Beispielcode:
ResearchPaper.objects.filter(
author__contained_by=["Alice"]
) # returns <QuerySet [<ResearchPaper: Second paper>]>
ResearchPaper.objects.filter(
author__contained_by=["Alice", "Bob"]
) # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Third paper>, <ResearchPaper: Fourth paper>]>
Ausgang:

Verwenden Sie die Überlappungs-Suche
Die Suche nach Überlappung gibt alle Datensätze zurück, deren Daten einzelne oder mehrere Suchwerte enthalten.
Beispielcode:
ResearchPaper.objects.filter(
author__overlap=["Alice"]
) # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Fourth paper>]>
ResearchPaper.objects.filter(
author__overlap=["Alice", "jenny"]
) # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Fourth paper>, <ResearchPaper: Fifth paper>]>
Ausgang:

Verwenden Sie die len-Suche
Die len-Suche überprüft die Länge der Daten und gibt alle Datensätze zurück, deren Länge dem Wert der len-Suche entspricht.
Beispielcode:
ResearchPaper.objects.filter(
author__len=1
) # returns <QuerySet [<ResearchPaper: Second paper>, <ResearchPaper: Third paper>]>
ResearchPaper.objects.filter(
author__len=3
) # returns <QuerySet [<ResearchPaper: First paper>]>
Ausgang:

Auf diese Weise können wir verschiedene Lookups verwenden, um die Datensätze nach ArrayField-Werten abzufragen.
Verwenden Sie ArrayField, um ein mehrdimensionales Array in Django-Modellen zu erstellen
Benutzer müssen möglicherweise zweidimensionale Arrays in den Django-Modellen erstellen, und Benutzer können dies mit dem ArrayField erreichen. Hier haben wir den grundlegenden Code geschrieben, um ein zweidimensionales Array in Django zu erstellen.
from django.db import models
from django.contrib.postgres.fields import ArrayField
class ResearchPaper(models.Model):
paperName = models.TextField()
Authors = ArrayField(
ArrayField(
models.TextField(blank=True),
)
)
In diesem Artikel haben wir gelernt, ein- und mehrdimensionale Arrays in Django-Feldern zu erstellen. Außerdem haben wir gelernt, die verschiedenen Lookups zu verwenden, um die Datensätze nach Werten von ArrayField abzufragen.
Benutzer können die Datensätze für das zweidimensionale Array wie ein eindimensionales Array abfragen.
