如何为Django模型的Choice字段设置默认值
Django Choice字段设置默认值的正确写法
首先,你之前的写法错误在于对CHAT_STYLES列表的访问方式不对——它是列表而非字典/对象,不能通过键名或属性名直接取值。另外注意你的max_length=2设置有问题,选项里的aquamarine长度远大于2,会导致数据存储失败,需要改成足够大的数值(比如20)。
正确写法一:直接使用选项的实际存储值
因为CHAT_STYLES里每个元组的第一个元素是数据库实际存储的值,直接把默认值设为对应的字符串即可:
CHAT_STYLES = [ ("orange", "orange"), ("purple", "purple"), ("aquamarine", "aquamarine"), ("aqua", "aqua"), ("beige", "beige"), ("yellow", "yellow"), ("green", "green"), ("blue", "blue") ] chat_styles = models.CharField( max_length=20, # 修正长度,确保容纳最长选项 choices=CHAT_STYLES, default="purple" )
正确写法二:定义常量(更易维护)
如果想让代码更清晰、便于后续修改,可以先定义每个选项的常量:
CHAT_STYLE_ORANGE = "orange" CHAT_STYLE_PURPLE = "purple" CHAT_STYLE_AQUAMARINE = "aquamarine" CHAT_STYLE_AQUA = "aqua" CHAT_STYLE_BEIGE = "beige" CHAT_STYLE_YELLOW = "yellow" CHAT_STYLE_GREEN = "green" CHAT_STYLE_BLUE = "blue" CHAT_STYLES = [ (CHAT_STYLE_ORANGE, "orange"), (CHAT_STYLE_PURPLE, "purple"), (CHAT_STYLE_AQUAMARINE, "aquamarine"), (CHAT_STYLE_AQUA, "aqua"), (CHAT_STYLE_BEIGE, "beige"), (CHAT_STYLE_YELLOW, "yellow"), (CHAT_STYLE_GREEN, "green"), (CHAT_STYLE_BLUE, "blue") ] chat_styles = models.CharField( max_length=20, choices=CHAT_STYLES, default=CHAT_STYLE_PURPLE )
为什么你的写法不生效?
CHAT_STYLES."purple":这种语法在Python里完全不合法,列表不能通过属性名访问元素。CHAT_STYLES["purple"]:列表是通过索引(数字)访问元素的,不能用字符串作为键,这是字典的用法。
内容的提问来源于stack exchange,提问作者Mike D Hovhannisyan
相关产品推荐
相关产品推荐

