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