在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操作MySQL数据库的方法分享
May 29 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
Python多继承原理与用法示例
Aug 23 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
Python生成词云的实现代码
Jan 14 Python
PyTorch中的C++扩展实现
Apr 02 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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
Terran兵种介绍
2020/03/14 星际争霸
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
模拟电子签章盖章效果的jQuery插件源码
2013/06/24 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
JavaScript中的闭包
2016/02/24 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
Python协程的用法和例子详解
2017/09/09 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Django获取该数据的上一条和下一条方法
2019/08/12 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
python如何支持并发方法详解
2020/07/25 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
Wedgwood英国官方网站:英式精致骨瓷餐具、礼品与生活精品,源于1759年
2019/09/02 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
Ejb技术面试题
2015/04/29 面试题
英文简历中的自我评价
2013/10/06 职场文书
成教毕业生自我鉴定
2013/10/23 职场文书
高中生毕业学习总结的自我评价
2013/11/14 职场文书
中层干部培训方案
2014/06/16 职场文书
会议开幕词
2015/01/28 职场文书
毕业设计致谢词
2015/05/14 职场文书
导游词之海南天涯海角
2019/12/05 职场文书