ChoiceFields sono memorizzati nel database come i valori, così per fare un esempio da the documentation:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Il database memorizzerà 'M' e 'F', quindi se voi un giorno decide di rinominare quelli in questo modo *:
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Homme'),
('F', 'Femme'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Quindi ovunque utilizzare i valori espanso 'Male' o 'F' ora avrà 'Homme' o 'Femme'.
Se si desidera modificare i valori stessi (ad es. "M" e "F"), è necessario aggiornare il database, quindi se si desidera modificare "M" in "H", allora si " d uso update
:
Foo.objects.filter(gender = 'M').update(gender = 'H')
a meno che non hai un buon motivo per, mi piacerebbe evitare di fare questo - dal momento che è necessario assicurarsi che il cambiamento GENDER_CHOICES
e la query update
sono fatto simultaneamente.
* E sì, questo so che questo è un modo stupido di fare traduzione!
fonte
2011-11-10 10:15:06