ChoiceFields są przechowywane w bazie danych jako wartości, tak aby wziąć przykład z the documentation:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Baza danych będzie przechowywać „M” i „F”, więc jeśli pewnego dnia zdecydujesz się zmienić nazwę tych jak ten *:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Homme'),
('F', 'Femme'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Następnie gdziekolwiek używasz rozszerzonym wartościach „mężczyzna” i „kobieta” będzie teraz „Homme” lub „Femme”.
Jeśli chcesz zmienić same wartości (np. "M" i "F"), musisz zaktualizować bazę danych, więc jeśli chcesz zmienić "M" na "H", wtedy " d użycie update
:
Foo.objects.filter(gender = 'M').update(gender = 'H')
chyba że masz dobry powód, by uniknąć w ten sposób - ponieważ trzeba upewnić się, że zmiana GENDER_CHOICES
i zapytanie update
są wykonywane równocześnie.
* Tak, wiem, że to głupi sposób na tłumaczenie!