Cuando tiene un campo modelo con una opción de opciones, tiende a tener algunos valores mágicos asociados con nombres legibles por humanos. ¿Existe en Django una forma conveniente de configurar estos campos por el nombre legible por humanos en lugar del valor?
Considere este modelo:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
En algún momento tenemos una instancia de Thing y queremos establecer su prioridad. Obviamente podrías hacer
thing.priority = 1
Pero eso te obliga a memorizar el mapeo Valor-Nombre de PRIORIDADES. Esto no funciona:
thing.priority = 'Normal' # Throws ValueError on .save()
Actualmente tengo esta tonta solución:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
pero eso es torpe. Dado lo común que podría ser este escenario, me preguntaba si alguien tenía una solución mejor. ¿Existe algún método de campo para configurar campos por nombre de elección que pasé por alto por completo?