Django模型中Choice字段的使用与值获取详解

青禾
青禾
发布时间:2026-10-13 | 4人浏览过
原创

本文详解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字段的完整使用说明,供开发者参考。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表