Quando hai un campo modello con un'opzione di scelta, tendi ad avere alcuni valori magici associati a nomi leggibili dagli umani. Esiste in Django un modo conveniente per impostare questi campi in base al nome leggibile dall'uomo invece che al valore?
Considera questo modello:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
Ad un certo punto abbiamo un'istanza Thing e vogliamo impostare la sua priorità. Ovviamente potresti fare,
thing.priority = 1
Ma questo ti costringe a memorizzare la mappatura valore-nome delle PRIORITÀ. Questo non funziona:
thing.priority = 'Normal' # Throws ValueError on .save()
Attualmente ho questa stupida soluzione alternativa:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
ma questo è goffo. Dato quanto comune potesse essere questo scenario, mi chiedevo se qualcuno avesse una soluzione migliore. Esiste un metodo di campo per impostare i campi in base al nome della scelta che ho completamente trascurato?