Ответ 1
ChoiceFields хранятся в базе данных как значения, поэтому, чтобы взять пример из документации:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
В базе данных будут храниться "M" и "F", поэтому, если вы однажды решите переименовать те, которые похожи на это:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Homme'),
('F', 'Femme'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Тогда везде, где вы используете расширенные значения, "Мужской" или "Женский" теперь будут иметь "Homme" или "Femme".
Если вы хотите сами изменить значения (например, "M" и "F" ), вы захотите обновить базу данных, поэтому, если вы хотите изменить "M" на "H", тогда вы используйте update
:
Foo.objects.filter(gender = 'M').update(gender = 'H')
Если у вас нет веских оснований, я бы этого не делал, так как вам нужно будет убедиться, что ваше изменение на GENDER_CHOICES
и ваш запрос update
выполняются одновременно.
* И да, это я знаю, что это глупый способ сделать перевод!