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之编写类之四再论继承
Oct 11 Python
在Python中关于中文编码问题的处理建议
Apr 08 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
python2.7的编码问题与解决方法
Oct 04 Python
Python 绘图和可视化详细介绍
Feb 11 Python
python3中函数参数的四种简单用法
Jul 09 Python
基于python实现学生管理系统
Oct 17 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
Python argparse模块应用实例解析
Nov 15 Python
Windows10+anacond+GPU+pytorch安装详细过程
Mar 24 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 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
再次研究下cache_lite
2007/02/14 PHP
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
PHP时间相关常用函数用法示例
2020/06/03 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
关于js datetime的那点事
2011/11/15 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
2016/12/24 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
JavaScript错误处理操作实例详解
2019/01/04 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
在python 中split()使用多符号分割的例子
2019/07/15 Python
python实现大文本文件分割
2019/07/22 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
安全资金保障制度
2014/01/23 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
中学生检讨书范文
2014/11/03 职场文书
论群众路线学习笔记
2014/11/06 职场文书
律政俏佳人观后感
2015/06/09 职场文书
企业法律事务工作总结
2015/08/11 职场文书