구글 번역기의 도움을 (많이) 받아 장고 공식 문서를 번역하였습니다.
Managers
class Managers
Manager는 데이터베이스 쿼리 수행이 Django 모델에 제공되는 인터페이스다. Django 앱의 모든 모델에 적어도 하나의 Manager가 존재한다.
Manager 클래스가 동작하는 방법은 쿼리 만들기에 설명되어 있다. 이 문서에서는 Manager 동작을 사용자 지정하는 모델 옵션에 대해 구체적으로 설명한다.
Manager 이름
기본적으로 Django는 모든 Django 모델 클래스에 objects라는 이름의 Manager를 추가한다. 그러나 객체를 필드 이름으로 사용하거나 Manager용 객체 이외의 이름을 사용하려면 모델별로 이름을 바꿀 수 있다.
주어진 클래스에 대해 Manager에 이름을 바꾸려면 해당 모델에서 models.Manager() 클래스 속성을 정의하면 된다. 예를 들면:
from django.db import models
class Person(models.Model):
#...
people = models.Manager()
이 예제 모델을 사용하면 Person.objects는 AttributeError 예외를 생성하지만 Person.people.all()은 모든 Person객체의 목록을 제공한다.
사용자 정의 Managers
기본 Manager 클래스를 확장하고 모델에서 사용자 정의 Manager를 인스턴스화하여 특정 모델에서 사용자 정의 관리자를 사용할 수 있다.
Manager를 사용자 정의하려는 두 가지 이유가 있다. Manager 메소드를 추가하거나 Manager가 반환하는 초기 QuerySet을 수정하는 것이다.
manager 메소드 더 추가하기
모델에 ‘테이블 레벨’ 기능을 추가하는 방법으로 extra manager 메소드를 추가하는 것이 좋다. (“행 레벨” 기능, 즉, 모델 객체의 단일 인스턴스에서 작동하는 함수의 경우 사용자 정의 Manager 메소드가 아닌 Model 메소드를 사용하면 된다)
사용자 정의 관리자 메소드는 원하는 모든 것을 리턴할 수 있다. QuerySet을 돌려 줄 필요는 없다.
예를 들어, 이 사용자 정의 관리자는 집계 쿼리(aggregate query)의 결과인 num_responses 속성이 추가 된 모든 OpinionPoll 객체의 목록을 반환하는 with_counts()메소드를 제공한다.
from django.db import models
class PollManager(models.Manager):
def with_counts(self):
from django.db
Comments