django-模型类管理器
小结
模型类.objects.all可以查询出所有的数据
objects是什么
?
它是一个模型类的管理器
本质是一个描述符,描述符是一个类属性的值是另一个类的实例化对象如何自定义模型类管理器的all方法
?
自定义一个类
类继承models.Manager
在类中重写all方法
在方法中调用父类方法
拿到父类方法的调用结果后再对数据进行处理
!
# 定义一个英雄类管理器
class HeroManage(models.Manager):def all(self):all_data = super().all()filter_data = all_data.filter(kt_id__exact=1)return filter_data
# 英雄模型类
class Hero(models.Model):name = models.CharField(max_length=20)skill = models.CharField(max_length=40)kt = models.ForeignKey("katoon", on_delete=models.CASCADE, default=1)# man = models.Manager()objects = HeroManage()
什么是模型类管理器
》查询英雄表的全部内容,代码的写法
models.Hero.objects.all()
在这里面的objects,就是管理器
它不仅有all方法,还有其它更多的方法
比如
filter
等等
如果我们会操作这个东西,就可以给它新增方法或者把功能给强化
原则上不改它的源代码
但是可以写一个自定义的类
让自定义的类去继承模型管理器的类
下面,先演示功能现象
然后再介绍常见的操作
模型类的管理器的功能演示
》给一个普通的模型类添加描述符
l图例中,类属性man现在是一个管理类了。
它将会产生特别的效果。
比如,代替原来的objects。
详情看步骤:
》生成迁移文件
》迁移文件
》进入shell
》描述符生效
》然而以前的objects没有用了
原因是,man霸了objects的功能
模型类的管理器的用法
可以利用模型类管理器,自己定义特别的方法,个性化的方法
》开始演练过程
写一个自定义的类
让这个类继承models.Manage类
如果在这个自定义类里写方法
这个方法可以被模型类使用
》先查一下数据库
当前我们的英雄表中有如下数据
》管理器的查询全部方法,可得到全部数据
all方法,试一试
练习的前提条件,把类还原为原来的状态
由状态1,还原为状态2,注意数据的迁移不要漏了
》正常的查询情况
模型管理器的all方法
》想法,改装all方法,让它只输出kt_id为1的内容
》办法,通过模型管理类来实现
自定义了一个英雄类管理器,它继承了models.Manager
在这个自定义的管理器类中,我们重写了all方法
先通过父类的all方法调用获取正常的数据
然后再把这些数据进行过滤,并且返回过滤后的结果
》结果,all方法的查询内容改变了
得到的是我们自定义的结果
其它用法
有了上面的技巧
我们就可以直接给管理器添加新的方法了
面向对向的知识,这里就需要用上
自定义一个方法,例子
调用这个方法,就往数据库中插入一条数据
# 定义一个英雄类管理器
class HeroManage(models.Manager):def all(self):all_data = super().all()filter_data = all_data.filter(kt_id__exact=1)return filter_datadef create_one_random(self):# 获取管理器所在的模型类hero_model = self.model# 新增一个行对象new_line = hero_model()# 生成数据import randomname = "_".join(random.sample(["a","b","c","1","2","3"],3))skill = "会心一击"kt_id = 1# 保存数据new_line.name = namenew_line.skill = skillnew_line.kt_id = kt_idnew_line.save()# 英雄模型类
class Hero(models.Model):name = models.CharField(max_length=20)skill = models.CharField(max_length=40)kt = models.ForeignKey("katoon", on_delete=models.CASCADE, default=1)# man = models.Manager()objects = HeroManage()def __str__(self):return self.name
运行结果
当然,还可以自定义别的方法,只要你想,你就可以
django-模型类管理器相关推荐
- Django框架(16.Django中的模型类管理器以及自定义管理器)
模型类.objects.all()->objects是一个什么东西呢? 答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询. objects是model ...
- 模型类序列化器ModelSerializer
如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类. ModelSerializer与常规 ...
- 四、模型类序列化器ModelSerializer
如果我们想要使用序列化器对应的是Django的模型类,DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类. ModelSerializer与常规 ...
- Django模型类与后台管理
文章目录 模型类 模型类设计 生成迁移文件 执行迁移生成表 通过模型类操作数据表 后台管理 1.本地化 2.创建管理员 3. 管理员登陆网址 4.注册模型类 5.自定义表单 模型类 模型类设计 在应用 ...
- 第十章:django模型类(二)
系列文章目录 第一章 :Django安装与配置虚拟环境 第二章:django各模块的作用以及参数说明 第三章: Django的路由与视图 第四章:django请求 第五章:django会话 第六章: ...
- django-模型类管理器-create方法-models属性
create方法 >功能 往表中插入数据 直接执行,不需保存 >格式 模型类.objects.create(字段1=值1,字段2=值2) >例子 >结果 models方法 获得 ...
- Django模型类操作数据表
1.创建项目 django-admin startproject my_first_django # 创建一个名称为my_first_django的项目 命令执行后会产生一个项目名称的文件夹和一个ma ...
- django 模型类的常见字段约束,以及filter 过滤和查询
null 不设置时默认设置为False.设置为True时,数据库表字段中将存入NULL的记录. null和blank组合使用,null=True,blank=True,表示该字段可以为空 blank ...
- Python Django 模型类字段常用属性
最新文章
- linux 安装jdk tar.gz
- Qt5.10.1在Windows平台下进行静态编译
- java 服务端客户端数据传输出现乱码
- 实现类似微博、QQ空间等的动态加载
- 附录:更多字典操作命令
- spark共享变量(广播变量Broadcast Variable,累加器Accumulators)
- 细谈 vue 核心- vdom 篇
- Leetcode10. Regular Expression Matching
- python免费教程发布页
- 关键成功因素法(CrISical Success Factors,CSF)
- OPENWRT,爱快等软路由推荐
- 福禄克CFP2-100-Q与OFP2-100-Q区别
- 2016阿里巴巴校招内推offer (by 伟伯)
- 《七堂极简物理课》总结
- Oracle ERP财务部分词汇
- LC463. 岛屿的周长
- CUMTCTF2020岁末赛wp
- 记录 mac os 下一些好用的软件
- python如何制作脚本_用python给自己做一款小说阅读器过程详解
- [python]抓取啄木鸟社区《活学活用wxPython》内容与图片