Django ArrayField

Shubham Vora 15 Februar 2024
  1. Verwenden Sie ArrayField, um ein eindimensionales Array in Django-Modellen hinzuzufügen
  2. Verwenden Sie ArrayField, um ein mehrdimensionales Array in Django-Modellen zu erstellen
Django ArrayField

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.

django postgresql einrichten

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.

django arrayfield add data

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:

Django-Array-Feld enthält

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:

Django-Arrayfield-Contained_by

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:

Django-Arrayfeldüberlappung

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:

django arrayfield len

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.

Shubham Vora avatar Shubham Vora avatar

Shubham is a software developer interested in learning and writing about various technologies. He loves to help people by sharing vast knowledge about modern technologies via different platforms such as the DelftStack.com website.

LinkedIn GitHub