Tengo django 3.2 y una clase IntegerChoices
class Type(models.IntegerChoices): GENERAL = 2, _("general address") DELIVERY = 4, _("delivery address") BILLING = 6, _("billing address")Puedo obtener el nombre y la etiqueta del valor fácilmente haciendo Type.GENERAL , Type.GENERAL.name y Type.GENERAL.label.
Pero, ¿cómo puedo obtener estos valores si solo tengo el valor, por ejemplo, quiero obtener el Nombre ENTREGA del valor 4?
Type[4].name ist no funciona porque los valores de la lista no corresponden a los valores int de la enumeración.
gracias matt
IntegerChoices.choices le devuelve una lista de tuplas con todo el contenido. En tu caso tendrás algo como:
[(2, 'general address'), (4, 'delivery address'), (6, 'billing address')]Por lo tanto, se puede hacer de esta manera:
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 NoneTambién puede hacer algo como esto si puede estar seguro de que es un valor válido:
print(Type(2).name) print(Type(2).label)