django Manager

2948 단어 .netdjangoBlogF#
관리자는 Django 응용 프로그램에 제공하는 데이터베이스 조회 조작의 인터페이스입니다.Django 프로그램의 모든 모델에는 최소한 하나의 관리자 대상이 있습니다.
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

좋은 웹페이지 즐겨찾기