在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 Web框架Flask信号机制(signals)介绍
Jan 01 Python
Python计算三维矢量幅度的方法
Jun 15 Python
python3实现163邮箱SMTP发送邮件
May 22 Python
pandas中apply和transform方法的性能比较及区别介绍
Oct 30 Python
python将一组数分成每3个一组的实例
Nov 14 Python
Python Matplotlib实现三维数据的散点图绘制
Mar 19 Python
Django之路由层的实现
Sep 09 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
Oct 30 Python
Python3 Tkinkter + SQLite实现登录和注册界面
Nov 19 Python
python单元测试框架pytest的使用示例
Oct 07 Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 Python
Python实现Telnet自动连接检测密码的示例
Apr 16 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
牡丹941资料
2021/03/01 无线电
用sql命令修改数据表中的一个字段为非空(not null)的语句
2010/06/04 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
php pdo oracle中文乱码的快速解决方法
2016/05/16 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
使用Vue中 v-for循环列表控制按钮隐藏显示功能
2019/04/23 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Django与遗留的数据库整合的方法指南
2015/07/24 Python
深入理解Python变量与常量
2016/06/02 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python微信库:itchat的用法详解
2017/08/14 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
python属于解释型语言么
2020/06/15 Python
Html5导航栏吸顶方案原理与对比实现
2020/06/10 HTML / CSS
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
毕业生实习鉴定
2013/12/11 职场文书
建设工地安全标语
2014/06/07 职场文书
校园文化标语
2014/06/18 职场文书
六查六看六改心得体会
2014/10/14 职场文书
单位接收证明格式
2015/06/18 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
Pygame Event事件模块的详细示例
2021/11/17 Python
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android