Подтвердить что ты не робот

ChoiceField в модели Django

Предположим, у меня есть ChoiceField в моей модели Django, которая состоит из нескольких вариантов.

Теперь, если в будущем я изменю существующий выбор (опцию) на другое имя (выбор), изменятся ли существующие записи в модели с этим выбором (опцией)? Нужно ли устанавливать эту новую опцию вручную на странице администратора?

4b9b3361

Ответ 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 выполняются одновременно.

* И да, это я знаю, что это глупый способ сделать перевод!