在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运行的17个时新手常见错误小结
Aug 07 Python
python字符串替换示例
Apr 24 Python
Python获取电脑硬件信息及状态的实现方法
Aug 29 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
Mar 13 Python
Python+Opencv识别两张相似图片
Mar 23 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
Python多进程multiprocessing用法实例分析
Aug 18 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
python实现微信小程序自动回复
Sep 10 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
mac pecl 安装php7.1扩展教程
2019/10/17 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
Bootstrap基础学习
2015/06/16 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
javascript中mouseover、mouseout使用详解
2015/07/19 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
python重试装饰器示例
2014/02/11 Python
python flask实现分页效果
2017/06/27 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
职务任命书范本
2014/06/05 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
周末问候语大全
2015/11/10 职场文书
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python