[The model layer] Meta options

구글 번역기의 도움을 (많이) 받아 장고 공식 문서를 번역하였습니다.


이 문서는 모델의 메타 클래스 내부에 줄 수 있는 모든 가능한 메타데이터 옵션을 설명함.

Available Meta options

abstract

Options.abstract

만약 abstract = True라면 이 모델은 abstract base class이다.

app_label

Options.app_label

모델이 INSTALLED_APPES에서 애플리에키션 외부에 정의된 경우 해당 모델이 속한 앱을 선언해야한다.

app_label = 'myapp'

app_label.object_name 또는 app_label.model_name 형식으로 모델을 나타내려면 model._meta.label 또는 model._meta.label_lower를 각각 사용할 수 있다.

get_latest_by

Options.get_latest_by

모델의 필드 이름 목록 또는 필드 이름(일반적으로 DateField, DateTimeField 또는 IntegerField)이다. 이 값은 모델 관리자의 latest() 및 earliest() 메소드에서 사용할 기본 필드를 지정한다.

예를 들어:

# Latest by ascending order_date.
get_latest_by = "order_date"

# Latest by priority descending, order_date ascending.
get_latest_by = ['-priority', 'order_date']

order_with_respect_to

Option.order_with_respect_to

이 객체를 지정된 필드 (일반적으로 ForeignKey)에 대해서 순서 붙일 수 있게 한다. 이것은 부모 객체와 관련하여 관련 객체를 정렬 할 수 있게 하는데 사용할 수 있다. 예를 들어, Answer이 Question 객체와 관련이 있고 Question에 둘 이상의 Answer이 있고 Answer의 순서가 중요한 경우 다음을 수행하면 된다.

from django.db import models

class Question(models.Model):
    text = models.TextField()
    # ...

class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    # ...

    class Meta:
        order_with_respect_to = 'question'

order_with_respect_to가 설정되면 관련 객체의 순서를 검색하고 설정하는 두 가지 메소드가 제공된다. Get_RELATED_order() 및 set_RELATED_order(). 여기서 RELATED는 소문자로 된 모델 이름이다. 예를 들어, Question 객체에 여러개의 관련 Answer 객체가 있다고 가정하면 반환되는 목록에는 관련 Answer객체의 기본 키가 포함된다.

>>> question = Question.objects.get(id=1)
>>> question.get_answer_order()
[1, 2, 3]

Question 객체의 관련 Answer 객체 순서는 Answer 기본 키 목록을 전달하여 설정할 수 있다.

>>> question.set_answer_order([3, 1, 2])

관련 객체에는 get_next_in_order() 및 get_previous_in_order()의 두 가지 메소드가 있다. 이 메소드는 적절한 순서로 객체에 액세스하는 데 사용할 수 있다. Answer객체가 id에 의해 정렬되었다고 가정한다.

>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order()
<Answer: 3>
>>> answer.get_previous_in_order()
<Answer: 1>

ordering

Options.ordering

객체의 기본 순서는 객체 목록을 가져올 때 사용한다.

ordering = ['-order_date']

문자열 및/또는 쿼리식으로 된 튜플 또는 리스트이다. 문자열 앞에 “-“가 붙어있다면 내림차순이고 “?”가 붙어있다면 무작위로 정렬된다. 기본은 오른차순. 예를 들어 pub_date 필드를 오름차순으로 정렬하려면 다음과 같이 쓰면 된다.

ordering = ['pub_date']

내림차순으로 정렬하려면

ordering = ['-pub_date']

pub_date는 내림차순으로 하고 author는 오름차순으로 하려면

ordering = ['-pub_date', 'author']

쿼리 식을 사용할 수도 있다. Author가 오름차순으로 되어있고 null값은 마지막으로 두려면 다음과 같이 쓴다.

from django.db.models import F

ordering = [F('author').asc(nulls_last=True)]

indexes

Options.indexes

모델에 정의하려는 인덱스 목록:

from django.db import models

class Customer(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)

    class Meta:
        indexes = [
            models.Index(fields=['last_name', 'first_name']),
            models.Index(fields=['first_name'], name='first_name_idx'),
        ]

unique_together

Options.unique_together

합께 취해진 필드 이름 셋은 고유해야한다.

unique_together = (("driver", "restaurant"),)

함께 고려할 때 고유해야하는 튜플의 튜플이다. 장고 관리자에서 사용되며 데이터베이스 수준에서 적용된다. (즉, 적절한 UNIQUE 문이 CREATE TABLE문에 포함됨)

편의상 unique_together는 단일 필드 집합을 처리할 때 단일 튜플이 될 수 있다.

unique_together = ("driver", "restaurant")

ManyToManyField는 unique_together에 포함될 수 없다. (이것이 의미하는 바는 분명하지 않다) ManyToManyField와 관련된 unique 유효성을 검사해야 하는 경우 signal또는 명시적 through모델을 사용해라.

제약 조건 위반 시 모델 유효성 검사 중에 일어난 ValidationError는 unique_together 오류 코드를 갖는다.

index_together

Option.index_together

대신 indexes옵션을 사용해라

새로운 indexes 옵션은 index_together보다 많은 기능을 제공한다. index_together는 향후 사용되지 않을 수 있다.

함께 취한 필드 이름 집합이 인덱싱된다.

index_together = [
    ["pub_date", "deadline"],
]

이 필드 목록은 함께 색인이 생성된다. (즉, 적절한 CREATE INDEX문이 수행된다) 편의상 index_together는 단일 필드 집합을 처리할 때 단일 목록이 될 수 있다.

index_together = ["pub_date", "deadline"]

verbose_name

Options.verbose_name

객체를 사람이 읽을 수 있도록 표현하다. 단수형

verbose_name = "pizza"

이것이 주어지지 않으면 알아서 변형시킨다. CamelCasecamel case가 됨

verbose_name_plural

Option.verbose_name_plural

객체의 복수형 이름

verbose_name_plural = "stories"

주어지지 않으면 장고는 verbose_name에 s를 붙인 것으로 사용한다.

Comments