0
点赞
收藏
分享

微信扫一扫

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


一,什么是模型管理器对象?

前面我们讲到了django的模型类的使用,当我们对模型类进行查询时使用​​类名.objects.all()​​获取此模型类下的所有数据的

那么为什么要使用.objects呢?

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

因为objects是django自动生成的管理器对象,通过这个对象可以实现对数据的查询

objects是models.manager 类的一个对象,我们可以自定义这个对象,自定义后系统就不在为我们自动生成

二,创建自己的管理器对象

​​在应用的models.py​​​ 中进行创建:​​book=models.Manager()​​ 注意新建哪个类的管理器对象就需要在哪个类中写

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


此时我们再用objects进行查询就会报错:(注意更改manage.py文件后需要quit();shell再重新进入)

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


因为我们自定义对象后系统就不会自动为我们生成objects对象

但是此时可以用我们写的book对象进行操作

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


三,继承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类设计自己需要的功能)_数据_05


在BookInfo类里面新建BookInfoManager的对象:

objects=BookInfoManager()

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

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

可以发现此时只得到了id为2

的数据实现了数据的过滤

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


同时也可以在继承类中写自己的方法,实现自己需要的功能

三,模型管理器对象和模型类的关系

模型类是对数据库文件进行插入操作,通过模型管理器对象进行查询,我们对模型管理器类进行重写,实现数据的过滤或者一些特定的功能


举报

相关推荐

0 条评论