개요
이 가이드 에서는 MongoDB 컬렉션을 나타내는 Django 모델을 만드는 방법을 학습 수 있습니다. 모델은 데이터 구조를 정의하는 Python 클래스입니다. 장고 MongoDB 백엔드를 사용하는 경우, 각 모델을 MongoDB 컬렉션 에 매핑하고 모델 객체를 사용하여 컬렉션의 문서와 상호 작용 수 있습니다.
팁
장고 모델에 대해 Model 자세히 학습 장고 문서에서 를 참조하세요.
지원되는 필드 유형
이 섹션에서는 모델에 포함할 수 있는 다음 필드 유형에 대한 장고 MongoDB 백엔드의 지원 에 대해 설명합니다.
장고 필드
다음 표에서는 장고 MongoDB 백엔드가 지원하는 장고 모델 필드에 대해 설명합니다.
필드 유형 | 설명 |
|---|---|
| Stores IntegerField values up to 64 bits in size. |
| Stores raw binary data. |
| Stores boolean ( True or False) values. |
| Stores string values. To store longer text values, use
TextField. |
| Stores date values in Python datetime.date instances. |
| Stores date and time values in Python datetime.datetime
instances. |
| Stores decimal values. |
| Stores values representing periods of time in
Python timedelta instances. |
| Stores CharField values and uses an EmailValidator
to verify that the value is an email address. |
| Stores file values. |
| Stores CharField values that represent filenames on your filesystem. |
| Stores float values. |
| Stores an IPv4 or IPv6 address in string format. |
| Stores a FileField value and verifies that the uploaded object
is a valid image. |
| Stores integer values up to 32 bits in size. |
| Stores JSON data. To learn more about this field, see the
Use a JSONField section in this guide. |
| Stores positive integer values up to 64 bits in size. |
| Stores positive integer values up to 32 bits in size. |
| Stores positive integer values up to 16 bits in size. |
| Stores a short text label, often for URL values. |
| Stores integer values up to 16 bits in size. |
| Stores large text values. |
| Stores a CharField value representing a URL. |
| Stores instances of Python's UUID class. |
MongoDB BSON 필드
MongoDB 유연한 데이터 처리 허용하는 BSON 이라는 바이너리 표현으로 문서를 구성하고 저장합니다.
팁
MongoDB BSON 데이터를 저장하는 방법에 대해 자세히 학습 MongoDB Server 매뉴얼에서 BSON 유형을 참조하세요.
다음 표에서는 지원되는 BSON 필드 유형과 장고 모델에서 사용할 수 있는 해당 장고 MongoDB 백엔드에 대해 설명합니다.
BSON 필드 유형 | Django MongoDB 백엔드 필드 유형 | BSON 설명 |
|---|---|---|
|
| Stores array values. To learn more about using this field
with Django MongoDB Backend, see the Use an ArrayField section
in this guide. |
|
| Stores embedded documents. To learn more about using this field
with Django MongoDB Backend, see the Use an EmbeddedModelField section in this guide. |
|
| Stores unique 12-byte identifiers that MongoDB uses as primary keys. |
|
| Stores binary data. |
|
| Stores true or false values. |
|
| Stores dates and times in milliseconds since the Unix
epoch, or January 1, 1970. |
|
| Stores 28-bit decimal values. |
|
| Stores floating-point values. |
|
| Stores 32-bit signed integers. |
|
| Stores 64-bit signed integers. |
|
| Stores UTF-8 encoded string values. |
모델 정의
MongoDB 컬렉션 나타내는 모델을 만들려면 애플리케이션의 models.py 파일 에 모델 클래스 정의를 추가합니다. 모델 클래스에서 저장 하려는 필드를 지정하고 내부 Meta 클래스에 모델 메타데이터 포함합니다. __str__() 메서드를 사용하여 모델의 문자열 표현을 정의할 수도 있습니다. 다음 구문을 사용하여 모델을 정의합니다.
class <Model name>(models.Model): <field name> = <data type> # Include additional fields here class Meta: # Include metadata here def __str__(self): # Include logic for displaying your model as a string here
팁
Meta 클래스에서 지정할 수 있는 메타데이터 옵션에 대해 자세히 학습하려면 장고 문서에서 모델 메타 옵션 을 참조하세요.
모델을 사용하려면 프로젝트의 settings.py 파일 에 모델을 추가해야 합니다. 다음 코드와 같이 models.py 파일 저장하는 모듈의 이름을 포함하도록 INSTALLED_APPS 값을 편집합니다.
INSTALLED_APPS = [ '<application module>', # Include other app modules here ]
마지막으로 프로젝트의 루트 디렉토리 에서 다음 데이터베이스 마이그레이션 명령을 실행 모델에 대한 MongoDB 컬렉션을 생성하거나 기존 컬렉션을 사용하여 모델 데이터를 저장 .
python manage.py makemigrations <application name> python manage.py migrate
예시
이 샘플 models.py 파일 다음 정보를 포함하는 Movie 모델 클래스를 정의합니다.
영화 데이터를 나타내는 필드 목록입니다.
Metadb_table옵션을movies로 설정하는 클래스입니다. 이는 장고 MongoDB 백엔드가 이 모델을 사용하여sample_mflix.moviesAtlas 샘플 데이터 세트의 컬렉션 나타내도록 지시합니다.또한
Meta클래스는managed옵션을False로 설정하여 Django MongoDB 백엔드가 모델에 대한 새 컬렉션 생성하지 않도록 지시합니다.__str__()모델의 문자열 표현을title필드 값으로 정의하는 메서드입니다.
from django.db import models class Movie(models.Model): title = models.CharField(max_length=200) plot = models.TextField(blank=True) runtime = models.IntegerField(default=0) released = models.DateTimeField("release date", null=True, blank=True) class Meta: db_table = "movies" managed = False def __str__(self): return self.title
고급 필드 사용
이 섹션에서는 Django 모델에서 다음 필드 유형을 사용하는 방법을 보여줍니다.
JSONField 사용
모델에서 JSONField 를 사용하여 JSON 객체를 저장 수 있습니다. JSON 은 사람이 읽을 수 있는 데이터 교환 형식이며, JSON 객체는 문자열 키를 값에 매핑하는 데이터 컨테이너입니다. MongoDB Object 필드 유형을 제공하여 JSON 데이터를 문서에 저장 하고 이 데이터를 내부적으로 BSON 또는 바이너리 JSON 형식으로 저장합니다.
참고
EmbeddedModelField 를 사용하여 MongoDB Object를 나타낼 수도 있습니다. 이 필드 에 대해 자세히 학습 이 가이드 의 EmbeddedModelField 사용 섹션을 참조하세요.
예시
다음 예시 JSONField 이 가이드 의 모델 정의 예시 에서 만든 모델에 값을 추가합니다. imdb라는 새 필드 각 Movie 객체 에 대한 사용자 평점을 나타내는 JSON 데이터를 저장합니다.
from django.db import models class Movie(models.Model): title = models.CharField(max_length=200) plot = models.TextField(blank=True) runtime = models.IntegerField(default=0) released = models.DateTimeField("release date", null=True, blank=True) imdb = models.JSONField(null=True, blank=True) class Meta: db_table = "movies" managed = False def __str__(self): return self.title
팁
에 저장된 데이터를 JSONField 쿼리 방법을 학습 쿼리 지정 가이드 의 JSONField 쿼리를 참조하세요.
제한 사항
장고 MongoDB 백엔드의 JSONField 지원 에는 다음과 같은 제한 사항이 있습니다.
필드 값을
None로 설정하다 하면 Django MongoDB 백엔드는 해당 값을 SQLNULL값으로 저장합니다. 또는JSONField값을 JSON 스칼라null를 나타내는Value(None, JSONField())로 설정하다 수 있습니다. 그러나 쿼리할 때 SQLNULL와 JSONnull를 구분할 방법이 없습니다.Q객체를 사용하는 일부 쿼리는 특히QuerySet.exclude()메서드를 사용할 때 예상한 결과를 반환하지 않을 수 있습니다.None값이 있는 필드를 쿼리할 때 Django MongoDB 백엔드는 필드 존재하지 않는 문서를 잘못 반환합니다.
ArrayField 사용
모델에서 ArrayField 를 사용하여 데이터 목록을 저장 수 있습니다. ArrayField을 생성하려면 ArrayField() 클래스 생성자를 사용하고 다음 인수를 전달합니다.
base_field: 배열 에 저장된 각 값의 기본 데이터 유형 지정합니다. 기본 필드 유형으로EmbeddedModelField또는FileField를 지정할 수 없습니다.size: (선택 사항) 배열 의 최대 크기를 지정합니다.options: (선택 사항) Django 필드 옵션을 지정합니다. 사용 가능한 옵션 목록을 보려면 Django 문서에서 필드 옵션 을 참조하세요.
팁
배열 값의 배열 ArrayField에 저장 수 있습니다. 다차원 배열의 예시 보려면 Django PostgreSQL 문서에서 ArrayField 를 참조하세요.
예시
다음 예시 ArrayField 이 가이드 의 모델 정의 예시 에서 만든 모델에 값을 추가합니다. genres라는 새 필드 영화 장르를 나타내는 CharField 값 목록을 저장하며 최대 5 값을 저장 수 있습니다.
from django.db import models from django_mongodb_backend.fields import ArrayField class Movie(models.Model): title = models.CharField(max_length=200) plot = models.TextField(blank=True) runtime = models.IntegerField(default=0) released = models.DateTimeField("release date", null=True, blank=True) genres = ArrayField( models.CharField(max_length=100), size=5, null=True, blank=True) class Meta: db_table = "movies" managed = False def __str__(self): return self.title
팁
에 저장된 데이터를 ArrayField 쿼리 방법을 학습 쿼리 지정 가이드 의 ArrayField 쿼리하기를 참조하세요.
EmbeddedModelField 사용
EmbeddedModelField 를 사용하여 중첩된 문서 값을 저장하는 MongoDB Object를 나타낼 수 있습니다. 이 유형을 사용하면 한 모델이 해당 필드 중 하나에 별도의 모델을 저장 수 있습니다. EmbeddedModelField를 만들려면 포함된 모델 클래스를 EmbeddedModel 추상 모델의 하위 클래스로 정의합니다. 그런 다음 EmbeddedModelField() 생성자를 사용하여 기본 모델 클래스에 필드 만들고 다음 인수를 전달합니다.
embedded_model: 저장 모델 클래스를 지정합니다.options: (선택 사항) Django 필드 옵션을 지정합니다. 사용 가능한 옵션 목록을 보려면 Django 문서에서 필드 옵션 을 참조하세요.
중요
makemigrations Django 명령은 임베디드 모델에 대한 변경 사항을 감지하지 못합니다. 임베디드 모델의 클래스를 변경하면 EmbeddedModelField 에 저장된 모델은 변경 사항을 반영하지 않습니다.
예시
이 예시 이 EmbeddedModelField 가이드 의 모델 정의 예시 에서 생성된 모델에 값을 추가합니다. awards라는 새 필드 임베디드 Award 모델을 값으로 저장합니다. 다음 코드는 Award 모델을 정의하고 EmbeddedModelField를 포함하도록 Movie 모델을 수정합니다.
from django.db import models from django_mongodb_backend.models import EmbeddedModel from django_mongodb_backend.fields import EmbeddedModelField class Award(EmbeddedModel): wins = models.IntegerField(default=0) nominations = models.IntegerField(default=0) text = models.CharField(max_length=100) class Movie(models.Model): title = models.CharField(max_length=200) plot = models.TextField(blank=True) runtime = models.IntegerField(default=0) released = models.DateTimeField("release date", null=True, blank=True) awards = EmbeddedModelField(Award, null=True, blank=True) class Meta: db_table = "movies" managed = False def __str__(self): return self.title
팁
에 저장된 데이터를 EmbeddedModelField 쿼리 방법을 학습 쿼리 지정 가이드 의 EmbeddedModelField 쿼리하기를 참조하세요.
추가 정보
모델을 사용하여 데이터베이스 작업을 실행 방법을 학습 데이터와의 상호 작용 가이드를 참조하세요.
장고 필드 유형에 대해 자세히 학습하려면 장고 문서에서 모델 필드 참조 를 참조하세요.