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

·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_length=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)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值