Kiedy masz pole modelu z opcją wyborów, zwykle masz pewne magiczne wartości związane z nazwami czytelnymi dla człowieka. Czy w Django istnieje wygodny sposób ustawiania tych pól na podstawie czytelnej dla człowieka nazwy zamiast wartości?
Rozważ ten model:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
W pewnym momencie mamy instancję Thing i chcemy ustawić jej priorytet. Oczywiście możesz to zrobić
thing.priority = 1
Ale to zmusza cię do zapamiętania mapowania nazwy wartości dla PRIORYTETÓW. To nie działa:
thing.priority = 'Normal' # Throws ValueError on .save()
Obecnie mam to głupie obejście:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
ale to jest niezgrabne. Biorąc pod uwagę, jak powszechny może być ten scenariusz, zastanawiałem się, czy ktoś ma lepsze rozwiązanie. Czy jest jakaś metoda ustawiania pól według nazwy wyboru, którą całkowicie przeoczyłem?