给定一个字段;
domain_status_choices = (
(1,'Live')
(2,'Offline')
(3,'Dev')
)
status = models.SmallIntegerField( choices=domain_status_choices )
我知道我可以获取和设置数字表示并使用 get_status_display()
获取文本标签。但是,如果用户发布 status=Offline
,我如何才能获取数值以保存它?我还希望能够验证列表中是否包含数字或文本值。
对我来说,使用字典更有意义。这是我目前的方法;
domain_status_choices = {
1: 'Live',
2: 'Offline',
3: 'Dev',
}
status = models.SmallIntegerField( choices=domain_status_choices.iteritems() )
...
if input1 not in domain_status_choices.keys(): print "invalid"
if input2 not in domain_status_choices.items(): print "invalid"
status = [k for k, v in domain_status_choices.iteritems() if v == input3][0]
有没有更好的方法?为什么通常使用元组的元组?
最佳答案
我相信不能保证对字典的键进行排序(除非您显然使用 OrderedDict
)。也就是说,您的版本“可能”获得“离线”、“开发”、“实时”选项。
关于 dict.items 的实现说明:
Keys and values are listed in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary’s history of insertions and deletions.
关于python - Django 模型字段选择 - 听写不是更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698972/