在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 3中print函数的使用方法总结
Aug 08 Python
详解Python字典小结
Oct 20 Python
pycharm 在windows上编辑代码用linux执行配置的方法
Oct 27 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
Series和DataFrame使用简单入门
Nov 13 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
Python对excel的基本操作方法
Feb 18 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读注册表
2006/10/09 PHP
Yii全局函数用法示例
2017/01/22 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
一个用js实现的页内搜索代码
2007/05/23 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
python中尾递归用法实例详解
2015/04/28 Python
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
文明教师事迹材料
2014/01/16 职场文书
体育教学随笔感言
2014/02/24 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
代理协议书
2014/04/22 职场文书
党支部活动策划方案
2014/08/18 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
美容院管理规章制度
2015/08/05 职场文书
详解TypeScript的基础类型
2022/02/18 Javascript