Django模型中Choice字段的使用与值获取详解
本文详解Django模型中Choice字段的定义与使用。介绍如何通过元组限制选项,区分value与display_name的获取方式:实例对象直接访问属性获取value,调用get_属性_display()方法获取展示名。针对模板无法直接调用方法的问题,提供自定义过滤器方案以在模板中显示display_name,确保前后端数据展示一致。
Django Choice字段定义与基础使用
在Django模型设计过程中,经常需要使用choice属性来限制用户可选的范围,例如性别字段通常限定为“男”或“女”。
class User(AbstractUser):
。。。
sex = models.CharField(verbose_name='性别',max_length=5,choices=(('male','男'),('female','女')),default='male')
choice参数接收一个元组,以确保选项值的不可变性。每个选项本身也是一个由(value, display_name)组成的元组,其中display_name表示在前端页面中实际展示给用户的内容。
Value与Display_Name的获取方式
在实际开发中,如何分别获取value和display_name?
以User对象为例,若实例为user,可通过user.sex直接获取value值;而若要获取display_name,则需调用user.get_sex_display()方法。
模板中显示Display_Name的解决方案
在Django模板中,使用{{ 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'}}即可实现显示(其中user为传入的变量)。
补充:获取对应字段值的方法
补充知识:Django中如何获取Choice字段对应的显示值。
具体调用方式如下所示:
class Area(models.Model):
Area_Level = (
(0, u'全国'),
(1, u'省、直辖市'),
(2, u'市、直辖市区'),
(3, u'区、县等'),
)
areaname = models.CharField(max_length=30,unique=True, verbose_name='区域名称')
code = models.CharField(max_length=20,blank=True, default="", verbose_name='区域代码')
parentid = models.IntegerField(verbose_name='父级id', null=True)
level = models.IntegerField(choices=Area_Level,verbose_name='层级', null=True)
object.get_level_display()
以上即为Django模型中Choice字段的完整使用说明,供开发者参考。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













