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

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

本文详解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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。