在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 相关文章推荐
利用numpy+matplotlib绘图的基本操作教程
May 03 Python
Python 和 JS 有哪些相同之处
Nov 23 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python 实现在Excel末尾增加新行
May 02 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
python requests爬取高德地图数据的实例
Nov 10 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
python3实现mysql导出excel的方法
Jul 31 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
PyQt5 界面显示无响应的实现
Mar 26 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实现验证码功能
2006/10/09 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
vue实现购物车选择功能
2020/01/10 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
医学专业毕业生个人的求职信
2013/12/04 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
冬季安全检查方案
2014/05/23 职场文书
车间核算员岗位职责
2014/07/01 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
经典导游欢迎词
2015/01/26 职场文书
音乐教师求职信范文
2015/03/20 职场文书
幼儿园教师求职信
2015/03/20 职场文书
承兑汇票延期证明
2015/06/23 职场文书
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android