장고 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
을 어떻게 설정했는지 확인할 수 있습니다.
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 모델을 만들었습니다. 여기에는 paperName
및 Authors
필드가 포함됩니다.
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
에서 데이터가 데이터베이스에 추가된 것을 볼 수 있습니다.
포함
조회 사용
포함
조회는 조회 값이 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>
출력:
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>]>
출력:
오버랩
조회 사용
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>]>
출력:
이렇게 하면 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차원 배열에 대한 레코드를 쿼리할 수 있습니다.