在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 相关文章推荐
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
python matplotlib库直方图绘制详解
Aug 10 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
Python图片的横坐标汉字实例
Dec 04 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
matplotlib制作雷达图报错ValueError的实现
Jan 05 Python
Python爬取某拍短视频
Jun 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中CI操作多个数据库的代码
2012/07/05 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
js中int和string数据类型互相转化实例
2019/01/16 Javascript
vue项目初始化到登录login页面的示例
2019/10/31 Javascript
解决Vue项目中tff报错的问题
2020/10/21 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
python实现数据库跨服务器迁移
2018/04/12 Python
pandas 数据实现行间计算的方法
2018/06/08 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
应聘收银员个人的求职信
2013/11/30 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
文员岗位职责范本
2015/04/16 职场文书
格林童话读书笔记
2015/06/30 职场文书
给领导敬酒词
2015/08/12 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers