在Django的模型中添加自定义方法的示例


Posted in Python onJuly 21, 2015

为了给你的对像添加一个行级功能,那就定义一个自定义方法。 有鉴于manager经常被用来用一些整表操作(table-wide),模型方法应该只对特殊模型实例起作用。

这是一项在模型的一个地方集中业务逻辑的技术。

最好用例子来解释一下。 这个模型有一些自定义方法:

from django.contrib.localflavor.us.models import USStateField
from django.db import models

class Person(models.Model):
  first_name = models.CharField(max_length=50)
  last_name = models.CharField(max_length=50)
  birth_date = models.DateField()
  address = models.CharField(max_length=100)
  city = models.CharField(max_length=50)
  state = USStateField() # Yes, this is U.S.-centric...

  def baby_boomer_status(self):
    "Returns the person's baby-boomer status."
    import datetime
    if datetime.date(1945, 8, 1) <= self.birth_date <= datetime.date(1964, 12, 31):
      return "Baby boomer"
    if self.birth_date < datetime.date(1945, 8, 1):
      return "Pre-boomer"
    return "Post-boomer"

  def is_midwestern(self):
    "Returns True if this person is from the Midwest."
    return self.state in ('IL', 'WI', 'MI', 'IN', 'OH', 'IA', 'MO')

  def _get_full_name(self):
    "Returns the person's full name."
    return u'%s %s' % (self.first_name, self.last_name)
  full_name = property(_get_full_name)

例子中的最后一个方法是一个property。 想了解更多关于属性的信息请访问http://www.python.org/download/releases/2.2/descrintro/#property

这是用法的实例:

>>> p = Person.objects.get(first_name='Barack', last_name='Obama')
>>> p.birth_date
datetime.date(1961, 8, 4)
>>> p.baby_boomer_status()
'Baby boomer'
>>> p.is_midwestern()
True
>>> p.full_name # Note this isn't a method -- it's treated as an attribute
u'Barack Obama'
Python 相关文章推荐
5种Python单例模式的实现方式
Jan 14 Python
python检测IP地址变化并触发事件
Dec 26 Python
python爬取微信公众号文章的方法
Feb 26 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
python实现提取str字符串/json中多级目录下的某个值
Feb 27 Python
python 装饰器功能与用法案例详解
Mar 06 Python
Python实现打包成库供别的模块调用
Jul 13 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
Python修改DBF文件指定列
Dec 19 Python
Python datetime模块的使用示例
Feb 02 Python
详解Python的Django框架中Manager方法的使用
Jul 21 #Python
通过数据库对Django进行删除字段和删除模型的操作
Jul 21 #Python
通过数据库向Django模型添加字段的示例
Jul 21 #Python
Django的数据模型访问多对多键值的方法
Jul 21 #Python
举例讲解Django中数据模型访问外键值的方法
Jul 21 #Python
编写自定义的Django模板加载器的简单示例
Jul 21 #Python
详解Python的Django框架中inclusion_tag的使用
Jul 21 #Python
You might like
php计算数组不为空元素个数的方法
2014/01/27 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP查看当前变量类型的方法
2015/07/31 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
2017/09/01 PHP
JS 日期验证正则附asp日期格式化函数
2009/09/11 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
ajax上传时参数提交不更新等相关问题
2012/12/11 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
node学习记录之搭建web服务器教程
2017/02/16 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
谈谈JavaScript中的函数
2020/09/08 Javascript
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
python交互式图形编程实例(二)
2017/11/17 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Python3简单实现串口通信的方法
2019/06/12 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
Python列表切片常用操作实例解析
2020/03/10 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
路政管理专业个人自荐信范文
2013/11/30 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
2014年教师工作总结
2014/11/10 职场文书
MySQL 条件查询的常用操作
2022/04/28 MySQL