根据Django官方文档:

 from django.db import models

 class Student(models.Model):
FRESHMAN = 'FR'
SOPHOMORE = 'SO'
JUNIOR = 'JR'
SENIOR = 'SR'
YEAR_IN_SCHOOL_CHOICES = (
(FRESHMAN, 'Freshman'),
(SOPHOMORE, 'Sophomore'),
(JUNIOR, 'Junior'),
(SENIOR, 'Senior'),
)
year_in_school = models.CharField(
max_length=2,
choices=YEAR_IN_SCHOOL_CHOICES, # choices中传入YEAR_SCHOOL_CHOICES的元组内容
default=FRESHMAN,
) def is_upperclass(self):
return self.year_in_school in (self.JUNIOR, self.SENIOR)

choices接收一个元组(保证值不可变),每个元组中的第一个元素是要在模型上设置的实际值,第二个元素是人类可读的名称。同理每一个选项也是由一个元组(value,display_name)构成。显而易见,display_name就是要在页面中展示的。

如何取到value和displayname?

比如说实例一个User对象user,则如示user.sex = value,user.get_sex_display() = display_name,通过属性取value,通过 get_属性_display()方法取display_name。

在模板中可以通过模板语言 {{ user.sex }}很简单地显示value,但不能直接调用 get_属性_display()方法(模板毕竟是模板语言)

只能自定义过滤器,顺便提一句django中是不能直接调用函数的,可以通过自定义filter来实现(template_filters.py)

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

模板中使用{{ user|displayName:'sex'}} 就OK(user是传入的变量)。

最新文章

  1. OA项目——总结
  2. linux 搜索相关命令(2)
  3. VS2013 带命令行参数的调试问题 解决方案
  4. jQuery代码优化:事件委托篇
  5. java语言中一些使用的小技巧(区别于c++)
  6. 动态创建Layout
  7. 【.NET】对文件的对称加密
  8. IOS 如何成为开发者&购买开发者账号 感想
  9. KVM如何以HADOOP作共享存储?
  10. 经典系统windows xp sp3官方原版下载(附XP序列号)
  11. Shell变量:Shell变量的定义、删除变量、只读变量、变量类型
  12. java的两种异常runtimeException和checkedException
  13. oracle一些基本命令
  14. 王家林人工智能AI课程大纲和电子书 - 老师微信13928463918
  15. 单元测试(qunit)
  16. java的官网下载(如有不懂,可以去我发的视频网站,那里面有详细过程)
  17. Java链接MySQL数据库的用配置文件和不用配置文件的代码
  18. Vue源码之----为什么Vue中Array的pop,push等方法可以reactive,而Array[0]='a'这样的方法不会reactive?
  19. POJ 2253 Frogger (Floyd)
  20. python 通用装饰器,带有参数的装饰器,

热门文章

  1. Linux安装Loadrunner generator
  2. java基础第一篇
  3. PAT甲级——1123 Is It a Complete AVL Tree (完全AVL树的判断)
  4. redis集群模式
  5. Django REST framework 的快速入门教程
  6. 基于华为云语音通知 VoiceCall 的应用上线记录并分享.NET CORE DEMO
  7. H5 之 Page Visibility
  8. Vue 简单实用---代码可以直接用
  9. MVC dropdownlist 后端设置select属性后前端依然不能默认选中的解决方法
  10. drupal基本知识介绍