在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 相关文章推荐
Python常用算法学习基础教程
Apr 13 Python
python使用tcp实现局域网内文件传输
Mar 20 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
python hash每次调用结果不同的原因
Nov 21 Python
Python json转字典字符方法实例解析
Apr 13 Python
python数据类型强制转换实例详解
Jun 22 Python
python爬虫使用正则爬取网站的实现
Aug 03 Python
提取视频中的音频 Python只需要三行代码!
May 10 Python
Python基础知识学习之类的继承
May 31 Python
Python使用pyecharts控件绘制图表
Jun 05 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与MySQL开发的8个技巧小结
2010/12/17 PHP
php通用防注入程序 推荐
2011/02/26 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
PHP会话控制实例分析
2016/12/24 PHP
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
python实现按行切分文本文件的方法
2016/04/18 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python实现银行实战系统
2020/02/26 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
意大利运动服减价商店:ScontoSport
2020/03/10 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
电视购物广告词
2014/03/19 职场文书
团日活动总结模板
2014/06/25 职场文书
房屋鉴定委托书范本
2014/09/23 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
四年级学生期末评语
2014/12/26 职场文书
奖学金主要事迹范文
2015/11/04 职场文书