장고 ArrayField

Shubham Vora 2023년6월20일
  1. ArrayField를 사용하여 Django 모델에서 1차원 배열 추가
  2. ArrayField를 사용하여 Django 모델에서 다차원 배열 생성
장고 ArrayField

Django의 ArrayField는 Java, C, C++ 등과 같은 다른 프로그래밍 언어의 배열 데이터 구조와 유사합니다. 동일한 데이터 유형의 여러 값을 저장합니다.

Django에서 Arrayfield로 이동하기 전에 사용자는 SQLite 데이터베이스가 Arrayfield를 지원하지 않기 때문에 PostgreSQL을 데이터베이스로 사용하고 있는지 확인해야 합니다.

PostgreSQL 데이터베이스를 설정하려면 사용자는 PostgreSQL 서버를 로컬에서 실행해야 합니다. 그런 다음 Django와 연결하려면 애플리케이션의 settings.py 파일에서 아래와 같이 DATABASES 배열을 변경해야 합니다.

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": "<DATABASES_name>",
        "USER": "<USER_name>",
        "PASSWORD": "<PASSWORD_of_user>",
        "HOST": "localhost",
        "PORT": "5432",
    }
}

아래 이미지에서 사용자는 settings.py 파일에서 PostgreSQL을 어떻게 설정했는지 확인할 수 있습니다.

django 설정 postgresql

ArrayField를 사용하여 Django 모델에서 1차원 배열 추가

이 섹션에서는 ArrayField를 사용하여 Django 모델에 값 배열을 추가합니다. 아래 예제는 ArrayField를 사용하여 TextField 배열을 만드는 방법을 보여줍니다.

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

위의 Python 코드에서 ResearchPaper에 대한 Django 모델을 만들었습니다. 여기에는 paperNameAuthors 필드가 포함됩니다.

paperName 필드는 일반 문자 필드이지만 단일 논문에 여러 저자가 있을 수 있으므로 ArrayField를 사용하여 Authors 필드를 만들었습니다.

models.py 파일에 모델을 추가했으면 모델을 등록해야 합니다. 모델을 등록하려면 admin.py가 없으면 생성하고 파일에 아래 코드를 추가합니다.

from .models import ResearchPaper

admin.site.register(ResearchPaper)

모델을 등록한 후 사용자는 모델을 데이터베이스로 마이그레이션해야 합니다. 이를 위해 사용자는 터미널에서 하나씩 아래 명령을 실행해야 합니다.

python manage.py makemigrations <app_name>
python manage.py migrate

이제 값에 따라 ArrayField에서 데이터를 쿼리하는 방법을 배웁니다.

ResearchPaper 테이블에서 데이터 쿼리를 시작하기 전에 몇 가지 데이터를 추가해 보겠습니다.

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"])

그래서 다른 저자의 연구 논문 기록을 일부 추가했습니다. 또한 일부 논문에는 여러 저자가 있고 한 저자가 여러 논문을 작성했습니다.

아래 gif에서 데이터가 데이터베이스에 추가된 것을 볼 수 있습니다.

django arrayfield 데이터 추가

포함 조회 사용

포함 조회는 조회 값이 ArrayField 데이터의 하위 집합인 모든 레코드를 반환합니다.

예제 코드:

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>

출력:

django arrayfield 포함

contained_by 조회 사용

contained_by 조회는 contains 조회의 반대입니다. 데이터가 조회 값의 하위 집합인 모든 레코드를 반환합니다.

예제 코드:

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>]>

출력:

django arrayfield included_by

오버랩 조회 사용

overlap 조회는 데이터에 단일 또는 다중 조회 값이 포함된 모든 레코드를 반환합니다.

예제 코드:

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>]>

출력:

장고 어레이 필드 겹침

len 조회 사용

len 조회는 데이터 길이를 확인하고 길이가 len 조회 값과 동일한 모든 레코드를 반환합니다.

예제 코드:

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>]>

출력:

장고 어레이필드 len

이렇게 하면 ArrayField 값에 따라 레코드를 쿼리하기 위해 다른 조회를 사용할 수 있습니다.

ArrayField를 사용하여 Django 모델에서 다차원 배열 생성

사용자는 Django 모델에서 2차원 배열을 만들어야 할 수 있으며 사용자는 ArrayField를 사용하여 이를 달성할 수 있습니다. 여기에서는 Django에서 2차원 배열을 만드는 기본 코드를 작성했습니다.

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),
        )
    )

이 기사에서는 Django 필드에서 단일 및 다차원 배열을 만드는 방법을 배웠습니다. 또한 ArrayField의 값에 따라 레코드를 쿼리하기 위해 다양한 조회를 사용하는 방법을 배웠습니다.

사용자는 1차원 배열과 같은 2차원 배열에 대한 레코드를 쿼리할 수 있습니다.

작가: Shubham Vora
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