Коли у вас є модельне поле з варіантом вибору, ви, як правило, мають деякі магічні значення, пов'язані з читаними людьми іменами. Чи є в Джанго зручний спосіб встановити ці поля за допомогою людського читаного імені замість значення?
Розглянемо цю модель:
class Thing(models.Model):
PRIORITIES = (
(0, 'Low'),
(1, 'Normal'),
(2, 'High'),
)
priority = models.IntegerField(default=0, choices=PRIORITIES)
У якийсь момент у нас є екземпляр Thing і ми хочемо встановити його пріоритет. Очевидно, ви могли б зробити,
thing.priority = 1
Але це змушує вас запам’ятати зіставлення значення-ім’я ПРИОРИТЕТІВ. Це не працює:
thing.priority = 'Normal' # Throws ValueError on .save()
Наразі у мене є такий дурний спосіб вирішення:
thing.priority = dict((key,value) for (value,key) in Thing.PRIORITIES)['Normal']
але це незграбно. З огляду на те, наскільки поширеним може бути цей сценарій, мені було цікаво, чи є хтось кращого рішення. Чи існує якийсь метод для встановлення полів за назвою вибору, який я повністю переглянув?