2011-11-10 11 views
22

Supongamos que tengo choicefield en mi modelo django que consta de varias opciones. ¿Ahora en el futuro si cambié la opción existente (opción) con algún otro nombre (opción), entonces, si los registros existentes en el modelo con esa opción (opción) también cambiarán? O en la página de administración, ¿debo configurar esa nueva opción manualmente?ChoiceField en Django modelo

¿Cómo puedo lograrlo?

Respuesta

79

ChoiceFields se almacenan en la base de datos como los valores, por lo que tomar un ejemplo de the documentation:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Male'), 
     ('F', 'Female'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

La base de datos almacenará 'M' y 'F', por lo que si algún día decide cambiar el nombre de las personas como esto *:

class Foo(models.Model): 
    GENDER_CHOICES = (
     ('M', 'Homme'), 
     ('F', 'Femme'), 
    ) 
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

A continuación, en cualquier lugar que utilizar los valores expandidos 'masculino' o 'femenino' tendrá ahora 'Homme' o 'Femme'.

Si quiere cambiar los valores (es decir, 'M' y 'F'), entonces querrá actualizar la base de datos, así que si quiere cambiar 'M' a 'H', entonces usted ' d uso update:

Foo.objects.filter(gender = 'M').update(gender = 'H') 

a menos que tenga una buena razón para, yo evitaría hacer esto - ya que necesitará para asegurarse de que su cambio a GENDER_CHOICES y la consulta update se realizan simultáneamente.

* Y sí, esto sé que esta es una manera estúpida de hacer la traducción!

Cuestiones relacionadas