Quando você tem um campo de modelo com uma opção de escolha, você tende a ter alguns valores mágicos associados a nomes legíveis por humanos. Existe no Django uma maneira conveniente de definir esses campos pelo nome legível por humanos em vez do valor?
Considere este modelo:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
Em algum ponto, temos uma instância de Thing e queremos definir sua prioridade. Obviamente, você poderia fazer,
thing.priority = 1
Mas isso força você a memorizar o mapeamento Nome-Valor de PRIORIDADES. Isso não funciona:
thing.priority = 'Normal' # Throws ValueError on .save()
Atualmente, tenho esta solução boba:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
mas isso é desajeitado. Dado o quão comum esse cenário pode ser, eu queria saber se alguém teria uma solução melhor. Existe algum método de campo para definir campos por nome de escolha que eu ignorei totalmente?