В этих choices
нет ничего волшебного. Элементы левого кортежа (назовем их ключами ) хранятся в базе данных, а элементы правого кортежа (назовем их значениями ): отображает с этих значений (таким образом, более удобочитаемое значение).
Идея состоит в том, что значения могут быть культурально-вариантными (например, в зависимости от переводимого языка), тогда как ключи равны инвариант : независимо от настроек ключи обычно всегда одинаковы. Поскольку они хранятся в базе данных, они не обязательно должны быть красивыми, поскольку программист должен понимать, что они означают. Однако, если кто-то и переводит ключи, то это может означать, что после изменения языка сервера Django больше не может интерпретировать строки, содержащие элементы в старом переводе. Поскольку 'active'
, конечно, не равно 'actief'
(нидерландский перевод).
Мой личный совет - использовать здесь подчеркивание, так как тогда это также и идентификатор Python, так что вы можете позже использовать его для операции getattr(..)
. Например:
getattr(Student, some_student.status.upper())
затем можно использовать для получения STUDENT.NOT_AVAILABLE
в случае, если some_student
имеет в качестве status
строку 'not_available'
, но, как уже было сказано, могут быть как причины первого, так и второго подхода.