django写博客第九章

1 Django自定义管理器
2 为什么要使用它呢?
在Django中,我们有些时候使用Django自带的ORM语句无法达到操作数据库的效果,这时,我们可以自定义一个管理器来进行数据库的操作。从总体上来说,就是重写管理器的方法和在管理器内部增加自定义方法
3 自定义方法
3.1model 类:
这里写图片描述

3.2数据库表:
这里写图片描述

3.3 如何得到“年份-月份-文章归档”,如下图所示:
这里写图片描述

3.4*创建一个管理类,ArticleManage, 并且自定义一个方法
这里写图片描述

3.5在模型类中添加语句:
这里写图片描述
3.6当我们运行Article.objects.distinct_date()的时候就会得到
这里写图片描述

4 重写管理器的方法
4.1 模型类

class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30,null=False)
    sgender = models.BooleanField(default=False)

    def __str__(self):
        return "Student:%s--%s"%(self.sname,self.sgender)

4.2 数据表
这里写图片描述

4.3 如何通过Student.objects.all() 查询sgender为True的记录?
思路:创建一个类,继承models.Manager,然后在这个类中重写all()方法。在all()方法中添加功能。然后在model类中,定义一个objects属性,使它成为类对象
4.4 管理器:

#自定义管理类
class getAllTrue(Manager):  #all()来自于Manager类
    # def all(self):      #重写方法
    #     return Manager.all(self).filter(sgender = True) #功能操作

    #-----def get_queryset(self): 与all() 方法相同,
    #在源码中,all()执行就是调用get_queryset()方法。
    def get_queryset(self):
        return Manager.get_queryset(self).filter(sgender=True)

4.5 模型类

class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30,null=False)
    sgender = models.BooleanField(default=False)

    def __str__(self):
        return "Student:%s--%s"%(self.sname,self.sgender)

4.6 ,在模型类中定义一个objects属性,使它成为类对象

class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=30,null=False)
    sgender = models.BooleanField(default=False)

    objects = getAllTrue()  #创建一个自定义类对象

    def __str__(self):
        return "Student:%s--%s"%(self.sname,self.sgender)

当我们运行Student.objects.all()时,返回的都是包含sgender为True的queryset

#查询结果:
Student.objects.all()
#Out[3]: <QuerySet [<Student: Student:zhangsan--True>, <Student: Student:zhaoliu--True>, <Student: Student:qianqi--True>]>

以上就是使用管理器的两种方法, 不足之处,欢迎批评指正,thanks!

参考链接:
https://blog.csdn.net/fm345689/article/details/80792768

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值