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
相关产品推荐
相关产品推荐

