在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常用随机数与随机字符串方法实例
Apr 09 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
python+selenium实现简历自动刷新的示例代码
May 20 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
python mysql断开重连的实现方法
Jul 26 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
django haystack实现全文检索的示例代码
Jun 24 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
python 装饰器重要在哪
Feb 14 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数组无限分级数据的层级化处理代码
2012/12/29 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
2015/08/27 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
Jquery+ajax请求data显示在GridView上(asp.net)
2010/08/27 Javascript
JavaScript类库D
2010/10/24 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
原生js实现秒表计时器功能
2017/02/16 Javascript
JavaScript mixin实现多继承的方法详解
2017/03/30 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
[01:26]DOTA2荣耀之路2:iG,China
2018/05/24 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python获取网页上图片下载地址的方法
2015/03/11 Python
同时安装Python2 &amp; Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python进阶之@property动态属性的实现
2019/04/01 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
商务助理岗位职责
2013/11/13 职场文书
区域总监的岗位职责
2013/11/21 职场文书
优秀英语专业毕业生求职信
2013/11/23 职场文书
企业职业病防治方案
2014/05/29 职场文书
外出学习心得体会范文
2016/01/18 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
MySQL视图概念以及相关应用
2022/04/19 MySQL