Manager (model)
Django Model에서 Manager는 데이터베이스와 상호 작용하는 인터페이스
- Default Manager : objects (rename 가능)
>>> Notice.objects.get(notice_id)
→ 여기서 objects가 Manager임
커스텀 모델 매니저
# blog/managers.py
class PublishedManager(models.Manager): # status가 published인 데이터를 필터하는 매니저 생성
def get_queryset(self):
return super().get_queryset().filter(status='published')
→ 커스텀 매니저 정의
# blog/models.py
from . import managers
class Post(models.Model):
post = models.Manager() # rename default Manager
published = managers.PublishedManager()
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
publish = models.DateTimeField(default=timezone.now)
→ 모델에 커스텀 매니저 추가
>>> Post.post.count() # 기존 Post.objects.count() 와 동일
2
>>> Post.published.count()
1