Django框架自定义模型管理器与元选项用法分析


Posted in Python onJuly 22, 2019

本文实例讲述了Django框架自定义模型管理器与元选项用法。分享给大家供大家参考,具体如下:

自定义模型管理器

每个模型类默认都有一个 objects 类属性,可以把它叫 模型管理器。它由django自动生成,类型为

django.db.models.manager.Manager

可以在模型类中自定义模型管理器,自定义后, Django将不再生成默认的 objects。(模型类可以自定义多个管理器)

例如:

class Department(models.Model):
  # 自定义模型管理器
  manager = models.Manager()

调用 Department.objects会抛出AttributeError异常,而 Department.manager.all()会返回一个包含所有Department对象的列表。

两种情况需要自定义管理器

修改管理器返回的原始查询集

需求: 调用 Department.manager.all()返回的是2009年之后成立的部门

管理器类中添加额外的方法,帮我们操作模型类对应的数据表

需求: 在管理器类中,定义一个创建部门的方法

一、自定义模型管理器

class DepartmentManager(Manager):
  # 修改管理器返回的原始查询集
  def all(self):
    """重写all方法:只返回2009年之后成立的部门"""
    return super().all().filter(create_date__gte=date(2009,1,1))
  # 在模型管理器中封装增删查的方法
  def create_dep(self, name, create_date):
    """新增一个部门"""
    dep = Department()
    dep.name = name
    dep.create_date = create_date
    dep.save()
    return dep # 返回新增后的员工对象

二、在模型类中使用自定义的模型管理器

class Department(models.Model):
  """部门类"""
  ...
  # 自定义模型管理器(默认的objects就不会再生成)
  objects = DepartmentManager()

三、在视图函数中,使用自定义的模型管理器中的方法

def add_dep(request):
  """新增部门"""
  # d = Department()
  # d.name = '财务部'
  # d.create_date = date(2018, 1, 1)
  # d.save()
  # 调用自定义的模型管理器,新增一个部门
  Department.objects.create_dep('财务部', date(2018, 1, 1))
  # 返回的不再是所有的部门,而是2009年之后成立的部门
  # Department.objects.all()
  return redirect('/show_deps')

元选项(Meta)

一、修改表名:

Django默认生成的表名:

应用名小写_模型类名小写
可以通过在模型类中定义Meta类来修改表名:

class Department(models.Model):
  """部门类"""
  name = models.CharField(max_length=20)
  class Meta(object):
     """指定表名"""
     db_table = "department"

重新生成迁移文件,并迁移生成表,查看表名是否有修改

二、修改模型类在管理后台的显示名称

Django框架自定义模型管理器与元选项用法分析

class Meta:
  # 定义表名
  db_table = 'department'
  # 定义在管理后台显示的名称
  verbose_name = '部门'
  # 指定复数时的名称(去除复数的s)
  verbose_name_plural = verbose_name

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python实现识别相似图片小结
Feb 22 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
Python用csv写入文件_消除空余行的方法
Jul 06 Python
Python匿名函数及应用示例
Apr 09 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
python dict乱码如何解决
Jun 07 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
python实现日志按天分割
Jul 22 #Python
python re.sub()替换正则的匹配内容方法
Jul 22 #Python
简单了解python gevent 协程使用及作用
Jul 22 #Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
Jul 22 #Python
python+logging+yaml实现日志分割
Jul 22 #Python
python删除列表元素的三种方法(remove,pop,del)
Jul 22 #Python
python Gunicorn服务器使用方法详解
Jul 22 #Python
You might like
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
PHP实现文件上传与下载
2020/08/28 PHP
动态表格Table类的实现
2009/08/26 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
javascript中去除数组重复元素的实现方法【实例】
2016/04/12 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
如何更好的编写js async函数
2018/05/13 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
Vue实现移动端拖拽交换位置
2020/07/29 Javascript
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python在图片中添加文字的两种方法
2017/04/29 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
青年教师典范事迹材料
2014/01/31 职场文书
音乐器材管理制度
2014/01/31 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
2014年手术室工作总结
2014/11/26 职场文书
介绍信的格式
2015/01/30 职场文书
英文诗歌翻译方法(赏析)
2019/08/16 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
Python pandas读取CSV文件的注意事项(适合新手)
2021/06/20 Python
python playwright 自动等待和断言详解
2021/11/27 Python
mysql 生成连续日期及变量赋值
2022/03/20 MySQL
python 学习GCN图卷积神经网络
2022/05/11 Python