在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 流程控制实例代码
Sep 25 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
在python Numpy中求向量和矩阵的范数实例
Aug 26 Python
Python实现CNN的多通道输入实例
Jan 17 Python
python圣诞树编写实例详解
Feb 13 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Python中random模块常用方法的使用教程
Oct 04 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
Python经常使用的一些内置函数
Apr 11 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获取远程图片并保存到本地的方法
2015/05/12 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PHP中串行化用法示例
2016/11/16 PHP
Nigma vs Alliance BO5 第二场2.14
2021/03/10 DOTA
jQuery EasyUI API 中文文档 - ValidateBox验证框
2011/10/06 Javascript
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
vue 项目常用加载器及配置详解
2018/01/22 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
最基础的Python的socket编程入门教程
2015/04/23 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
python实现顺时针打印矩阵
2019/03/02 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
浅析python连接数据库的重要事项
2021/02/22 Python
意大利高端时尚买手店:Stefania Mode
2018/03/01 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
怎样写演讲稿
2014/01/04 职场文书
写好自荐信需做到的5要点
2014/03/07 职场文书
安全负责人任命书
2014/06/06 职场文书
审计班子对照检查材料
2014/08/27 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python