Les champs de choix sont stockés dans la base de données en tant que valeurs, donc pour prendre un exemple de la documentation :
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
La base de données conservera les noms "M" et "F", de sorte que si vous décidez un jour de les renommer comme ceci* :
class Foo(models.Model):
GENDER_CHOICES = (
('M', 'Homme'),
('F', 'Femme'),
)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Ainsi, partout où vous utilisez les valeurs étendues "Male" ou "Female", vous obtiendrez "Homme" ou "Femme".
Si vous souhaitez modifier les valeurs (c'est-à-dire 'M' et 'F') elles-mêmes, vous devrez mettre à jour la base de données. Ainsi, si vous souhaitez remplacer 'M' par 'H', vous utiliserez la méthode suivante update
:
Foo.objects.filter(gender = 'M').update(gender = 'H')
À moins que vous n'ayez une bonne raison de le faire, j'éviterais de le faire, car vous devrez vous assurer que votre modification de l'option GENDER_CHOICES
et votre update
Les requêtes sont effectuées simultanément.
*Et oui, je sais que c'est une façon stupide de faire de la traduction !