Получение имени или метки из django IntegerChoices, предоставляющих действительное значение

У меня django 3.2 и класс IntegerChoices

 class Type(models.IntegerChoices):
        GENERAL = 2, _("general address")
        DELIVERY = 4, _("delivery address")
        BILLING = 6, _("billing address")

Я могу легко получить имя и метку значения, выполнив Type.GENERAL , Type.GENERAL.name и Type.GENERAL.label.

Но как я могу получить эти значения, если у меня есть только значение, например, я хочу получить название DELIVERY из значения 4.

Type[4].name не работает, так как значения списка не соответствуют значениям int в перечислении.

Спасибо Matt

IntegerChoices.choices возвращает вам список кортежей со всем содержимым. В вашем случае у вас будет что-то вроде:

[(2, 'general address'), (4, 'delivery address'), (6, 'billing address')]

Таким образом, это можно сделать следующим образом:

class Type(models.IntegerChoices):
    GENERAL = 2, _("general address")
    DELIVERY = 4, _("delivery address")
    BILLING = 6, _("billing address")

def label_by_type_value(value):
    choices = [c[1] for c in Type.choices if c[0] == value]
    return choices[0] if len(choices) else None
Вернуться на верх