jwh5566
2017-12-06
Python3.6 ,Django 1.11, 自定义管理器
class IncompleteTodoManager(models.Manager): # 自定义管理器子类
def get_queryset(self):
return super(IncompleteTodoManager, self).get_queryset().filter(is_done=False)
class HighPriorityManager(models.Manager):
def get_queryset(self):
return super(HighPriorityManager, self).get_queryset().filter(priority__gt=1)
class ToDo(models.Model):
content = models.CharField(max_length=200)
is_done = models.BooleanField(default=False)
priority = models.IntegerField(default=1)
def __str__(self):
return "%s-%d" %(self.content, self.priority)
todoLists = models.Manager() # 重命名默认的管理器
incomplete = IncompleteTodoManager() # 定义自定义管理器的实例
high = HighPriorityManager()
class ToManager(models.Manager):
def incomplete(self):
return self.filter(is_done=False)
def high(self):
return self.filter(priority__gt=1)
class TodoQueryset(models.QuerySet):
def incomplete(self):
return self.filter(is_done=False)
def high(self):
return self.filter(priority__gt=1)
class newTodoManager(models.Manager):
def get_queryset(self):
return TodoQueryset(self.model, using=self._db)
class ToDo(models.Model):
content = models.CharField(max_length=200)
is_done = models.BooleanField(default=False)
priority = models.IntegerField(default=1)
def __str__(self):
return "%s-%d" %(self.content, self.priority)
# objects = newTodoManager()
object = TodoQueryset.as_manager() # 调用查询集的方法生成管理器,可以不用定义管理器
todoLists = models.Manager()
incomplete = IncompleteTodoManager()
high = HighPriorityManager()
可以在view中调用管理器的时候,省略all查询集的调用
class newTodoManager(models.Manager):
def get_queryset(self):
return TodoQueryset(self.model, using=self._db)
def incomplete(self):
return self.get_queryset().incomplete()
def high(self):
return self.get_queryset().high()