Django模型中的字段有个choices属性,这个属性可以提供被选数据,choices的参数是一个元组,它里面也是元组构成,第一个参数是choices的可选参数,第二个是对这个参数的说明。如果一个字段设置了这个属性,在模版中如果我要显示这个字段,那么django模版系统就会将它默认解析为一个下拉菜单,这样对于一个静态的下拉菜单式很方便的,下来我们看下django官方文档中对这个属性使用的介绍。

我们这儿有个例子,我们先定义一个模型,名字为Person ,这个Person 包含了名字和性别两个字段,代码如下:

from django.db import models
class Person(models.Model):
GENDER_CHOICES = (
(u'M', u'Male'),
(u'F', u'Female'),
)
name = models.CharField(max_length=60)
gender = models.CharField(max_length=2, choices=GENDER_CHOICES)

接下来我们看下在程序中如何取到带choices属性的gender字段的值。

>>> p = Person(name="Fred Flinstone", gender="M")
>>> p.save()
>>> p.gender
u'M'
>>> p.get_gender_display()
u'Male'

可见gender字段中保存了两个信息,一个为value,一个display_name,我要取value时直接用p.gender即可,如果要取

display_name时用p.get_gender_display()这个函数即可。

接下来看看这个Person如何在界面上显示呢?首先需要定义一个继承自模型Person的Form,代码如下:

from django import forms
class PersonForm(forms.ModelForm):
class Meta:
model = Person
#实例化一个PersonForm然后传给模版
pf = PersonForm()

此时在模版中用{{pf.gender}}即可显示一个下拉菜单,的确方便了开发。如果我想在界面上显示display_name,直接使用{{p.get_gender_display}}就不行,可是在实际的开发中的确有这样的需求,此时我们就想到了自定义过滤器,代码如下:

@register.filter(name='displayName')
def displayName(value, arg):
return apply(eval('value.get_'+arg+'_display'), ())

这样我们用{{p|displayName:'gender'}}即可显示出display_name了。这个需求常出现在人员列表的场景中。

最新文章

  1. ERwin入门
  2. Python第一天 - 迭代
  3. Linux学习笔记(4)-远程登录
  4. 在 lua 中实现函数的重载
  5. [转载] 深入理解 docker ulimit
  6. sysfs - 用于导出内核对象(kobject)的文件系统
  7. 【转】windows环境下利用doxygen生成代码文档
  8. 10.在Global全局文件中的Application_BeginRequest示例
  9. NSString NSCFString区别
  10. 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性
  11. 2013~2014年度 NOIP~GDOI总结
  12. 深度神经网络(DNN)损失函数和激活函数的选择
  13. pyqt pyside QLabel 显示图片
  14. spring_08aop原理及案例
  15. 山东理工大学SDUT - ACM OJ 题: Python代码 及分析
  16. java相关技术问答(一)
  17. Java线上问题排查思路及Linux常用问题分析命令学习
  18. POJ.1379.Run Away(模拟退火)
  19. Make menuconfig生成文件
  20. s28 LNMP架构服务搭建

热门文章

  1. LitJson(读Exce文件写入到json文件):
  2. Android微信开放平台,申请移动应用的 应用签名 如何获取
  3. Quartz使用(4) - Quartz监听器Listerner
  4. Git 打补丁流程
  5. html:option
  6. 内存分配详解 malloc, new, HeapAlloc, VirtualAlloc,GlobalAlloc
  7. The twentieth day
  8. 编译Win32动态库工程的两个链接错误的解决
  9. Eclipse Action
  10. 也谈ThreadLocal