模型类.objects.all()->objects是一个什么东西呢?

答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询。

objects是models.Manger类的一个对象

自定义管理器之后Django不再帮我们生成默认的objects管理器。

--------------------------------------------------------------------------------------------------------------------------------

使用博客之前使用过的模型类,然后在项目的shell中导入模型类,进行查看类型

自定义模型管理器类

  1. 自定义一个管理器类,这个类继承models.Manger类。
  2. 再在具体的模型类里定义一个自定义管理器类的对象。

定义一个模型管理器类,然后在模型类中使用

class BookInfoManager(models.Manager):"""图书模型管理器类"""passclass BookInfo(models.Model):"""图书模型类"""# 图书名称btitle = models.CharField(max_length=20)# 出版日期bpub_date = models.DateField()# 阅读量bread = models.IntegerField(default=0)# 评论量bcomment = models.IntegerField(default=0)# 删除标记isDelete = models.BooleanField(default=False)'''自定义管理器'''book = BookInfoManager()

然后在项目的shell中,

我们一旦自定义了管理器,就要使用定义的管理器查询,可以看到我们自定义的Manager

自定义管理器类的应用场景

   1.改变查询的结果集。

比如调用BookInfo.books.all()返回的是没有删除的图书的数据。

    2.添加额外的方法。

管理器类中定义一个方法帮我们操作模型类对应的数据表。

使用self.model()就可以创建一个跟自定义管理器对应的模型类对象。

1.举例,模型类对应的表中有这个表

  现在通过BookInfo.book.all()自定义管理器只取到isDelete为0的数据

  重写all()方法,如果有其他的需求的时候可以重新其他对应的方法

class BookInfoManager(models.Manager):"""图书模型管理器类"""# 改变查询的结果集def all(self):# 1.调用父类的all,获取所有数据books = super().all() # QuerySet# 2.对数据进行过滤books = books.filter(isDelete=False)# 3.返回booksreturn books

然后进行验证,重新打开项目的shell,   进行查询之后就获取到了4条数据(过滤掉了一条)

 2.为模型类添加额外的方法,使其通过模型类.方法名就可以插入保存数据

class BookInfoManager(models.Manager):"""图书模型管理器类"""# 改变查询的结果集def all(self):# 1.调用父类的all,获取所有数据books = super().all()  # QuerySet# 2.对数据进行过滤books = books.filter(isDelete=False)# 3.返回booksreturn books# 封装函数:操作模型类对应的数据表'''添加额外的方法'''def create_book(self, btitle, bpub_date):# 1.创建一个图书对象model_class = self.modelbook = model_class()book.btitle = btitlebook.bpub_date = bpub_date# 2. 保存进数据库book.save()# 3. 返回objreturn book

然后重新进入到项目的shell中进行插入,   注意:日期要符合日期字符串的格式,或者使用date()函数

数据中也相应的有了该条数据,因为我们在额外的方法中使用了save()函数保存到数据库

这个额外的方法通常写在管理器中,当然也可以写在模型类中,当写在模型类中,使用的时候则直接模型类调用该方法就行了,并且定义成模型类的类方法。注意区别

把方法定义在管理器的时候,管理器中有个自带的方法create(),使用这个时候必须带参数

数据库就已经有了

模型管理器类和模型类的关系

Django框架(16.Django中的模型类管理器以及自定义管理器)相关推荐

  1. Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)

    Django中的模型类的定义以及模型类字段属性和选项 1.模型类的定义 2.模型类属性命名限制 2.1字段类型和属性 2.2选项 1.模型类的定义 ORM:表就代表类,字段代表属性 模型类需要继承自m ...

  2. Django框架(13.Django中的查询集)

    查询集 在使用Django中的模型类查询函数:all, filter, exclude, order_by调用这些函数会产生一个查询集,QuerySet类对象可以继续调用上面的所有函数. 查询集特性 ...

  3. Django实践(二)——使用模型类定义数据表,实现表单页面跳转

    Django实践(二)--使用模型类定义数据表,实现表单页面跳转 1.设计和开发信息发布的数据防访问层 配置djangosite/settings.py中的INSTALLED_APPS,添加应用app ...

  4. Django框架(6.django后台管理/通过后台对数据表的增删改)

    1.django项目中的admin.py  即:  后台管理相关文件 使用Django提供的相关管理机制的步骤 1.本地化 语言和时区的本地化    ( 修改项目中的settings.py的文件) 2 ...

  5. WebServices中使用cxf开发日志拦截器以及自定义拦截器

    首先下载一个cxf实例,里面包含cxf的jar包.我下的是apache-cxf-2.5.9 1.为什么要设置拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截 ...

  6. (十三)常见开发工具及QC中站点管理、项目自定义管理常见操作

    一.自动化工具分类 1.功能自动化测试工具 QTP(quickTest Professional) 2.性能自动化 LoadRunner 3.测试管理工具 QC.TD(TestDirector) Bu ...

  7. Django框架(14.Django中模型类的关系,以及模型类关联查询)

    Django中模型类的关系,以及模型类关联查询 1.模型类关系 1.1 一对多关系 1.2多对多关系 1.3 一对一关系 1.4 一对多举例: 1.5 多对多举例: 1.6 一对一举例: 2.关联查询 ...

  8. Django框架(11.Django中的通过模型类查询数据以及相关函数和条件)

     Django中的查询函数 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询.    不管哪个函数注意返回值的类型 函数名 功能 返回值 说明 get 返回表中满足条件的 ...

  9. Django框架(5.django中模型类建立关系和多表关系查询)

    1.建立好模型类: from django.db import models# 设计和模型对应的类,(模型类) # Create your models here.# 一类 # 图书类 class B ...

最新文章

  1. Pytorch学习 - Task5 PyTorch卷积层原理和使用
  2. Ubuntu根目录文件作用分析
  3. Matlab学习笔记:画图多重设置
  4. 漫谈 Linux,Windows 和 Mac
  5. 当使用tensorflow时出现“the requested device apperas to be a GPU, but CUDA is not enabled”的解决办法
  6. cc1: all warnings being treated as errors
  7. 希腊字母|罗马数字|中文数字大写
  8. html不用画布太阳系示意图,html5-canvas-太阳系2
  9. springboot志愿者管理系统
  10. android m4a播放器,如何在android上解码m4a音频
  11. 带蒙版的安卓剪辑软件_抖音运营干货,9款手机剪辑软件APP,从此让你用手机轻松玩转剪辑...
  12. cesium gltf 1.0 2.0的一些扩展
  13. stl文件转stp (二次开发)
  14. Android自定义View实现方位刻度尺(类似于吃鸡手游)
  15. H3C无线AC+AP配置4——Wifi名称相同,但不同楼不同vlan
  16. php之session_start详解
  17. c#和python_饮冰三年-人工智能-Python-10之C#与Python的对比
  18. wetool 接入图灵机器人_wetool自动接受新好友wetool使用教程-客服
  19. python从小兵到将军之路
  20. linux系统设计软件,适用于Linux系统的4种最佳Adobe Illustrator替代软件介绍

热门文章

  1. GitHub轻松阅读微服务实战项目流程详解【第一天:数据库表设计及其环境搭建、项目运行】
  2. spring原始注解(value)-03
  3. camuda流程引擎如此简单「五」
  4. service层的方法上使用@Transactional注解,程序发生异常没有回滚
  5. 数据结构与算法之数组
  6. 阿里云yum源安装SVN失败的问题
  7. C++【“using namespace std”的意思、#include “iostream“与#include < iostream>区别、< iostream>与< iostream.h>区别】
  8. JavaWeb学习之路——SSM框架之Mybatis(二)
  9. Android Lifecycle组件使用
  10. HTML+MYSQL+PHP搭建带有cookie的登陆页面