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

Django中带choices参数的下拉单选框保存后数据库存储什么值

问题描述

我有一个名为 "Month"的下拉单选框,共包含 "January"、"February"、"March"3个选项,效果如下图所示:
选项示意图

以下是 "Date"类 中实现 "Month"下拉单选框 的代码(对应store/models.py文件,适用于新版Django):

# "store/models.py"
from django.db import models

class Date(models.Model):
    class Months(models.TextChoices):
        JANUARY  = 'JAN', 'January'
        FEBRUARY = 'FEB', 'February'
        MARCH    = 'MAR', 'March'
    
    month = models.CharField(max_length=100, choices=Months.choices)

以下是旧版本Django中实现相同功能的等效代码,同样定义在 "Date"类 中:

# "store/models.py"
from django.db import models

class Date(models.Model):
    JANUARY  = 'JAN'
    FEBRUARY = 'FEB'
    MARCH    = 'MAR'

    MANTHS = [
        (JANUARY,  'January'),
        (FEBRUARY, 'February'),
        (MARCH,    'March')
    ]

    month = models.CharField(max_length=100, choices=MANTHS)

请问如果在下拉框中选择 "February" 选项后点击 "SAVE" 按钮,数据库中会存储什么内容?是 "FEBRUARY"、"FEB" 还是 "February"?
保存操作示意图

答案

数据库最终存储的值是FEB。

Django模型字段的choices配置有固定规则:每个选项为一个二元元组,元组第一个元素是实际写入数据库的值,第二个元素是面向终端用户的展示文案。
两种写法的逻辑完全一致:

  • 下拉框中看到的February是给用户展示的可读文本,不会存入数据库
  • 类属性名FEBRUARY只是Python代码层面的常量标识,方便在业务代码中引用对应选项,也不会存入数据库
  • 元组第一个位置定义的FEB才是真正会写入month数据库字段的值

如果需要在代码中获取字段对应的展示文本,调用模型实例的get_<字段名>_display()方法即可,针对这个字段调用date_instance.get_month_display()就会返回展示文本February。


内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:18:41