You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何用values_list获取IntegerChoice的标签而非数值

解决Django中values_list获取IntegerChoices标签而非数值的问题

默认情况下,values_list()会直接返回gender字段存储的数值(1或2)。要获取对应的标签字符串(Male/Female),可以通过两种方式实现:

方法一:数据库层面注解(推荐,性能更优)

通过Django的数据库函数Case和When在查询时动态生成标签字段,适用于数据量较大的场景:

首先导入所需模块:

from django.db.models import Case, When, Value, CharField
from .models import Policy

然后执行查询:

result = Policy.objects.annotate(
    gender_label=Case(
        When(gender=Policy.Gender.MALE, then=Value(Policy.Gender.MALE.label)),
        When(gender=Policy.Gender.FEMALE, then=Value(Policy.Gender.FEMALE.label)),
        default=Value(''),  # 处理gender为null的情况
        output_field=CharField()
    )
).values_list("maca", "gender_label")

方法二:模型属性+Python层面处理

如果数据量不大,可以在模型中定义属性方法,再手动生成结果列表:

在Policy模型中添加属性:

class Policy(models.Model):
    # 原有代码不变
    @property
    def gender_label(self):
        return self.get_gender_display() if self.gender else ''

然后在视图中处理:

result = [(obj.maca, obj.gender_label) for obj in Policy.objects.all()]

内容的提问来源于stack exchange,提问作者Korab Duklini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:15:54