从任意值获取django字段“选择”

时间:2015-08-11 15:52:21

标签: django python-3.4

我有一个像这样的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有内置的方法来做这件事

1 个答案:

答案 0 :(得分:3)

不是真的。你最好的选择是将CHOICES元组转换为dict并进行查找:

printk()