Django模型领域选择 - 不会更好吗?

Jak*_*ake 12 python django django-models

给定一个领域;

domain_status_choices = (
    (1,'Live')
    (2,'Offline')
    (3,'Dev')
)
status = models.SmallIntegerField( choices=domain_status_choices )
Run Code Online (Sandbox Code Playgroud)

我知道我可以获取并设置数字表示并用于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]
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?为什么通常使用元组元组?

vic*_*vic 14

我相信dict的键不能保证排序(除非你OrderedDict明显使用).也就是说,您"可能"在您的版本中获得"离线","开发","实时"选择.

关于dict.items的实施说明:

键和值以任意顺序列出,这是非随机的,在Python实现中各不相同,并且取决于字典的插入和删除历史.