django Manager
Django는 기본적으로 모든 모델에 Objects라는 관리자를 자동으로 추가합니다.단, Objects를 필드 이름으로 사용해야 한다면, Objects라는 이름을 사용하고 싶지 않거나, 모델에 사용자 정의 이름을 지정할 수도 있습니다.모델에 모델을 정의하면.Manager () 유형의 속성은 관리자 객체입니다.
from django.db import models class Person(models.Model): #... people = models.Manager()
이 예에서 Person.objects.all ()는 이상을 일으키고 Person.people.all () 에서 모든 Person 객체 제공
Book.objects.all ()에서 objetcs는 Manager의 예입니다.그러면 언제 맞춤형 관리자가 필요할까요? to add extra 관리자 methods, and/or to modify the initial Query Set the 관리자 returns.
1) Adding Extra Manager Methods 예: Book Model에 키워드 개수를 통계적으로 지정하는 방법 추가
class BookManager(models.Manager): def title_count(self,keyword): return self.filter(tille__icontains=keyword).count()
class Book(models.Model): tille = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() objects = BookManager() def __unicode__(self): return self.tille 2) Modifying Initial Manager QuerySets 관리자의 기본 QuerySet 반환 테이블의 모든 기록을 되돌려줍니다. 필요하면 반환 내용을 맞춤형으로 설정할 수 있습니다.Manager를 다시 쓰기만 하면 됩니다.get_query_set ()이면 됩니다.예: 다음 모델은 dahl 관리자를 사용하면 Book을 사용합니다.dahl_ojbects.all () 시 Yonggao가 쓴 모든 책만 되돌려줍니다.
from django.db import models
# First, define the Manager subclass.class DahlBookManager(models.Manager): def get_query_set(self): return super(DahlBookManager, self).get_query_set().filter(author='yonggao')
# Then hook it into the Book model explicitly.class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) # ...
objects = models.Manager() # The default manager. dahl_objects = DahlBookManager() # The Dahl-specific manager.상기 예의 주의점: 관리자를 정의할 때 모델을 항상 보존하십시오.Manager () 이 기본 관리자입니다.
사용자 정의 관리자는 공통된 필터를 정의할 수 있습니다. 예를 들어 아래의 예는 서로 다른 관리자를 사용하여 서로 다른 데이터를 관리하는 것이 더욱 쉽습니다.
class MaleManager(models.Manager): def get_query_set(self): return super(MaleManager, self).get_query_set().filter(sex='M')
class FemaleManager(models.Manager): def get_query_set(self): return super(FemaleManager, self).get_query_set().filter(sex='F')
class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) sex = models.CharField(max_length=1, choices=(('M', 'Male'), ('F', 'Female'))) people = models.Manager() men = MaleManager() women = FemaleManager()
하나의 주의점: 모델에 여러 명의 관리자를 정의하면 첫 번째 관리자는django의 기본 관리자입니다.django의 많은 부분은 기본 관리자로 모델을 처리합니다.
본 논문은 CSDN 블로그에서 왔으며, 전재는 출처를 밝혀 주십시오: http://blog.csdn.net/sunyonggao/archive/2009/10/25/4726802.aspx
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.