Когда у вас есть поле модели с опцией выбора, вы склонны иметь магические значения, связанные с понятными для человека именами. Есть ли в Django удобный способ установить эти поля по понятному человеку имени вместо значения?
Рассмотрим эту модель:
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']
но это неуклюже. Учитывая, насколько распространенным может быть этот сценарий, мне было интересно, есть ли у кого-нибудь лучшее решение. Есть ли какой-нибудь метод полей для установки полей по имени выбора, который я полностью пропустил?