在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 相关文章推荐
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
想学python 这5本书籍你必看!
Dec 11 Python
python 修改本地网络配置的方法
Aug 14 Python
python同步windows和linux文件
Aug 29 Python
Python算法中的时间复杂度问题
Nov 19 Python
pytorch获取模型某一层参数名及参数值方式
Dec 30 Python
tensorflow求导和梯度计算实例
Jan 23 Python
pytorch模型存储的2种实现方法
Feb 14 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
Python通过Tesseract库实现文字识别
Mar 05 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 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将数据库导出成excel的方法
2010/05/07 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
Javascript 日期处理之时区问题
2009/10/08 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
简单谈谈React中的路由系统
2017/07/25 Javascript
详解Vue2.5+迁移至Typescript指南
2019/08/01 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python中的choice()方法使用详解
2015/05/15 Python
在Django中创建动态视图的教程
2015/07/15 Python
详解python中的json的基本使用方法
2016/12/21 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
简单了解django orm中介模型
2019/07/30 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
《数星星的孩子》教学反思
2014/04/11 职场文书
法学求职信
2014/06/22 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
趣味运动会口号
2015/12/24 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
python实现局部图像放大
2021/11/17 Python
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js
js前端图片加载异常兜底方案
2022/06/21 Javascript