我有一个像这样的django类:
class my_thing(models.Model):
AVAILABLE = 1
NOT_AVAILABLE = 2
STATUSES = (
(AVAILABLE, "Available"),
(NOT_AVAILABLE, "Not available")
)
status = models.IntegerField(...., choices = STATUSES)
在另一段代码中,我有一个与状态对应的数字,但由于一些遗留代码,我需要通过字符串进行比较(我不想在模型定义以外的任何地方硬编码 - DRY)
所以在代码中我有数字“1”,我希望得到文本“可用”。
我当前(糟糕)的解决方法是执行以下操作:
status_getter = my_thing()
my_thing.status = my_thing.AVAILABLE
comparison_str = status_getter.get_status_display()
是否有更好/内置的方法来直接访问字段选择的字符串值,因为我没有已经实例化的那种类型的对象?我可以写一个函数
def get_status_on_value(self, value):
for tup in STATUSES:
if tup[0] == value:
return tup[1]
但我怀疑django有内置的方法来做这件事
答案 0 :(得分:3)
不是真的。你最好的选择是将CHOICES元组转换为dict并进行查找:
printk()