您的位置:首页 > 编程语言 > Go语言

7. Django学习笔记——models的Manager

2019-03-31 23:30 204 查看

·django通过models的manager来执行数据库操作。
·每个django model至少有一个manager。
·可以自定义manager。
·自定义manager必须继承自models.Manager

给默认的manager改名:

class Person(models.Model):
#这里有一个默认的
objects = models.Manager()(manage其实是Person的类属性)
...
people = models.Manager()

这里相当于改名,会替代objects,原来的objects就不能用了,要向想可以使用,在最后加上这个:

objects = models.Manager()

定制manager
1)增加额外的方法:

class BookManager(models.Manager):
def title_count(self, keyword):
return self.filter(title__icontains=keyword).count()
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
num_pages = models.IntegerField(blank=True, null=True)
objects = BookManager()

def __str__(self):
return self.title

2)修改默认manager的查询集

class DahlBookManager(models.Manager):
def get_queryset(self):
return super(DahlBookManager, self).get_queryset().filter(author='Roa')

class Book(models.Model):
title = models.CharField(max_leng
4000
th=100)
author = models.CharField(max_length=50)

objects = models.Manager() # The default manager.
dahl_objects = DahlBookManager() # The Dahl-specific manager.

3)使用多个manager

class MaleManager(models.Manager):
def get_queryset(self):
return super(MaleManager, self).get_queryset().filter(sex='M')

class FemaleManager(models.Manager):
def get_queryset(self):
return super(FemaleManager, self).get_queryset().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()

def get_queryset(self):
return super().get_queryset().filter(gender=True)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: