当您有一个带有选项选项的模型字段时,您往往会有一些与人类可读名称相关联的魔术值。在Django中是否有一种方便的方式来设置这些字段的人类可读名称而不是值?通过选择设置Django IntegerField = ...名称
考虑这一模式:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
在某些时候,我们有一件事实例,我们要设置其优先级。显然你可以这样做,
thing.priority = 1
但是,这迫使你记住PRIORITIES的价值 - 名称映射。这不起作用:
thing.priority = 'Normal' # Throws ValueError on .save()
目前我有这个愚蠢的解决办法:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
但这是笨重。鉴于这种情况有多普遍,我想知道是否有人有更好的解决方案。是否有一些字段方法可以通过选择名称来设置字段,而我完全忽略了?
这是一个很好的详细的博客张贴在这个问题上。很难找到谷歌,所以谢谢。 – 2009-07-13 13:54:28
FWIW,如果您需要从文字字符串(可能来自表单,用户输入或类似字符串)设置它,则可以执行:thing.priority = getattr(thing,strvalue.upper())。 – mrooney 2013-02-24 23:22:19
真的很喜欢博客上的封装部分。 – 2013-03-03 21:57:10