Получение имени или метки из 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