在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中实现一个高性能计数器(Counter)实例
Jul 09 Python
python线程、进程和协程详解
Jul 19 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 Python
如何利用python查找电脑文件
Apr 27 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
PageFactory设计模式基于python实现
Apr 14 Python
Python读写Excel表格的方法
Mar 02 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 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下的权限算法的实现
2007/04/28 PHP
PHP与C#分别格式化文件大小的代码
2011/05/14 PHP
js 提交和设置表单的值
2008/12/19 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
JavaScript 原型学习总结
2010/10/29 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JavaScript对数字的判断与处理实例分析
2015/02/02 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
2016/11/10 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
vue.js实现的幻灯片功能示例
2019/01/18 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
利用Python批量生成任意尺寸的图片
2016/08/29 Python
用python实现的线程池实例代码
2018/01/06 Python
python频繁写入文件时提速的方法
2019/06/26 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
python属于跨平台语言码
2020/06/09 Python
Python join()函数原理及使用方法
2020/11/14 Python
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
七夕活动策划方案
2014/08/16 职场文书
优秀纪检干部材料
2014/08/27 职场文书
员工年终自我评价
2014/09/14 职场文书
运动会表扬稿
2015/01/16 职场文书
公司放假通知怎么写
2015/04/15 职场文书
学校计划生育责任书
2015/05/09 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
从原生JavaScript到React深入理解
2022/07/23 Javascript