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