Lorsque vous avez un champ de modèle avec une option de choix, vous avez tendance à avoir des valeurs magiques associées à des noms lisibles par l'homme. Existe-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, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
À un moment donné, nous avons une instance Thing et nous voulons définir sa priorité. Evidemment tu pourrais faire,
thing.priority = 1
Mais cela vous oblige à mémoriser le mappage Valeur-Nom des PRIORITÉS. Cela ne fonctionne pas:
thing.priority = 'Normal' # Throws ValueError on .save()
Actuellement, j'ai cette solution de contournement stupide:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
mais c'est maladroit. Étant donné la fréquence de ce scénario, je me demandais si quelqu'un avait une meilleure solution. Existe-t-il une méthode de champ pour définir les champs par nom de choix que j'ai totalement négligé?