在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 相关文章推荐
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python中的 enum 模块源码详析
Jan 09 Python
python按照多个条件排序的方法
Feb 08 Python
在cmd中查看python的安装路径方法
Jul 03 Python
python中文分词库jieba使用方法详解
Feb 11 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
Keras 使用 Lambda层详解
Jun 10 Python
Python类及获取对象属性方法解析
Jun 15 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 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
域名查询代码公布
2006/10/09 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
js实现可以点击收缩或张开的悬浮窗
2017/09/18 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
Vue3为什么这么快
2020/09/23 Javascript
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python删除空文件和空文件夹的方法
2015/07/14 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
python实现图像识别功能
2018/01/29 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python3.6数独问题的解决
2019/01/21 Python
pymysql的简单封装代码实例
2020/01/08 Python
Python标准库shutil模块使用方法解析
2020/03/10 Python
应届毕业生求职信范文
2013/12/18 职场文书
计算机专业毕业生自荐信
2013/12/31 职场文书
高中数学教学反思
2014/01/30 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
给老师的感谢信
2015/01/20 职场文书
健康证明
2015/06/19 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python