在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的Django框架完成视频处理任务的教程
Apr 02 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
Python中遍历字典过程中更改元素导致异常的解决方法
May 12 Python
pandas按若干个列的组合条件筛选数据的方法
Apr 11 Python
Python Opencv实现图像轮廓识别功能
Mar 23 Python
通过python改变图片特定区域的颜色详解
Jul 15 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
Python实现投影法分割图像示例(一)
Jan 17 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
使用Python发现隐藏的wifi
Mar 04 Python
基于pandas向csv添加新的行和列
May 25 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
详解JSON.stringify()的5个秘密特性
2020/05/26 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python实现随机密码字典生成器示例
2014/04/09 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
python实现验证码识别功能
2018/06/07 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
企业宗旨标语
2014/06/10 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
健康教育主题班会
2015/08/14 职场文书
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python