52 votes

Champ de choix dans le modèle Django

Supposons que j'ai ChoiceField dans mon modèle Django qui consiste en plusieurs choix.

Si, à l'avenir, je change le choix existant (option) par un autre nom (choix), les enregistrements existants dans le modèle avec ce choix (option) changeront-ils également ? Dois-je définir cette nouvelle option manuellement dans la page d'administration ?

149voto

Dominic Rodger Points 44489

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 !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X