django学习笔记009-模型_模型管理器对象(重写objects类设计自己需要的功能)

一,什么是模型管理器对象?
前面我们讲到了django的模型类的使用,当我们对模型类进行查询时使用类名.objects.all()获取此模型类下的所有数据的
那么为什么要使用.objects呢?
在这里插入图片描述因为objects是django自动生成的管理器对象,通过这个对象可以实现对数据的查询
objects是models.manager 类的一个对象,我们可以自定义这个对象,自定义后系统就不在为我们自动生成
二,创建自己的管理器对象
在应用的models.py 中进行创建:book=models.Manager()
注意新建哪个类的管理器对象就需要在哪个类中写
django学习笔记009-模型_模型管理器对象(重写objects类设计自己需要的功能)_第1张图片
此时我们再用objects进行查询就会报错:(注意更改manage.py文件后需要quit();shell再重新进入)

django学习笔记009-模型_模型管理器对象(重写objects类设计自己需要的功能)_第2张图片
因为我们自定义对象后系统就不会自动为我们生成objects对象
但是此时可以用我们写的book对象进行操作
在这里插入图片描述
三,继承Manager的类的重写
我们可以写一个继承manager类实现我们自己 的一些操作:
新建:

from django.db import models
#设计和表模型类的数据
# Create your models here.
class BookInfoManager(models.Manager):  #继承models.Manager
    def all(self):  #重写all方法
        books=super(BookInfoManager, self).all()  #调用父类的all方法(super为父类)
        book=books.filter(id=2)  #获得id为2的
        return book
    

django学习笔记009-模型_模型管理器对象(重写objects类设计自己需要的功能)_第3张图片
在BookInfo类里面新建BookInfoManager的对象:

 objects=BookInfoManager()

退出shell再重新进入执行objects.all():

 from booktest.models import BookInfo
BookInfo.objects.all()

可以发现此时只得到了id为2
的数据实现了数据的过滤
在这里插入图片描述
同时也可以在继承类中写自己的方法,实现自己需要的功能
三,模型管理器对象和模型类的关系
模型类是对数据库文件进行插入操作,通过模型管理器对象进行查询,我们对模型管理器类进行重写,实现数据的过滤或者一些特定的功能

你可能感兴趣的:(Django)