Lorsque vous avez un champ de modèle avec une option choices, vous avez tendance à avoir certaines valeurs magiques associées à des noms lisibles par l'homme. Y a-t-il dans Django un moyen pratique de définir ces champs par le nom lisible par l'homme au lieu de la valeur ?
Considérez ce modèle :
class Thing(models.Model):
PRIORITIES = (
(0, 'Faible'),
(1, 'Normal'),
(2, 'Élevé'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
À un moment donné, nous avons une instance de Thing et nous voulons définir sa priorité. Évidemment, vous pourriez faire :
thing.priority = 1
Mais cela vous oblige à mémoriser le mapping Valeur-Nom de PRIORITIES. Cela ne fonctionne pas :
thing.priority = 'Normal' # Lance une ValueError sur .save()
Actuellement, j'ai cette solution de contournement ridicule :
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
mais c'est maladroit. Étant donné à quel point ce scénario pourrait être courant, je me demandais si quelqu'un avait une meilleure solution. Y a-t-il une méthode de champ pour définir des champs par nom de choix que j'aurais totalement négligée ?