版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzw2016/article/details/81546311
今天设计models时,用到了choice这个属性,用来限制用户做出选择的范围。比如说性别的选择(男或女)。
class User(AbstractUser):
。。。
sex = models.CharField(verbose_name='性别',max_length=5,choices=(('male','男'),('female','女')),default='male')
choice接收一个元组(保证值不可变),同理每一个选项也是由一个元组(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()')#eval字符串方法了解一下
模板中使用{{ user|displayName:'sex'}}
就OK(user是传入的变量)。