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