在Django的模型中添加自定义方法的示例

作者:goldensun 时间:2021-12-07 17:14:58 

为了给你的对像添加一个行级功能,那就定义一个自定义方法。 有鉴于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'

标签:Django,模型
0
投稿

猜你喜欢

  • 关于mysql 的时间类型选择

    2024-01-17 11:44:20
  • 使用WordPress发送电子邮件的相关PHP函数用法解析

    2024-05-11 09:44:45
  • 详解Python实现URL监测与即时推送

    2023-12-29 08:18:35
  • 设定sql server定期自动备份数据库

    2024-01-16 18:14:30
  • mysql 实现互换表中两列数据方法简单实例

    2024-01-24 07:11:04
  • golang 防缓存击穿singleflight的实现

    2024-05-09 09:55:23
  • python 二维数组90度旋转的方法

    2021-05-18 20:16:19
  • 将DataTable作为存储过程参数的用法实例详解

    2024-01-27 14:23:24
  • Python插入Elasticsearch操作方法解析

    2021-08-30 01:47:09
  • Django文件上传与下载(FileFlid)

    2023-07-10 11:33:33
  • 一个非常简单好用的Python图形界面库(PysimpleGUI)

    2022-12-25 08:17:09
  • python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法

    2021-01-03 05:25:29
  • Python+tkinter编写一个最近很火的强制表白神器

    2022-10-25 07:42:10
  • Python中的xlrd模块使用整理

    2023-03-30 17:35:04
  • JS实现单击输入框弹出选择框效果完整实例

    2024-04-22 22:33:02
  • 在python 不同时区之间的差值与转换方法

    2023-10-15 12:20:57
  • 11个并不被常用但对开发非常有帮助的Python库

    2023-10-25 15:00:56
  • 页面嵌入Windows Media Player播放器代码需要注意的

    2023-07-02 17:04:48
  • mssql无数据库日志文件恢复数据库的方法第1/2页

    2024-01-28 16:33:52
  • OpenCV-Python使用cv2实现傅里叶变换

    2023-07-08 05:11:06
  • asp之家 网络编程 m.aspxhome.com