2010-12-23 13 views
7

Tengo un modelo Django que usa el choicesattribute.¿Cómo cambio las opciones en un modelo de Django?

COLOR_CHOICES = (
    ('R', 'Red'), 
    ('B', 'Blue'), 
) 
class Toy(models.Model): 
    color = models.CharField(max_length=1, choices=COLOR_CHOICES) 

Mi código está en producción y ahora me gustaría agregar opciones adicionales.

COLOR_CHOICES = (
     ('R', 'Red'), 
     ('B', 'Blue'), 
     ('G', 'Green'), 
) 

¿Cómo puedo hacer esto? ¿Utiliza Django restricciones de la base de datos para hacer cumplir las elecciones? ¿Debo hacer una migración de la base de datos (estoy usando South)? ¿O Django solo impone la restricción de opciones en el código de Python y todo lo que tengo que hacer es cambiar el código y reiniciar?

Gracias!

Respuesta

11

Django no impone las opciones a nivel de base de datos, solo las usa para la presentación de los widgets y en la validación. Si los quieres un poco más 'dinámico', por ejemplo para tener otros diferentes en diferentes servidores se podría definir a través de settings.py:

from django.conf import settings 

COLOR_CHOICES = getattr(settings, 'COLOR_CHOICES',(
     ('R', 'Red'), 
     ('B', 'Blue'), 
     ('G', 'Green'), 
)) 

entonces se podría definir diferentes opciones en su settings.py (sin necesidad de cualquier migración de base de datos !).

+0

Esa es una buena idea. Pero estás diciendo que tal como está, no hay necesidad de migración de DB. Solo necesito cambiar el código y reiniciar? – Adam

+0

sí ... y además ese no debería ser el gran problema para probarlo, ¿verdad? –

+0

No es un gran problema en absoluto. ¡Funcionó! ¡Gracias! – Adam

1

El campo es models.CharField por lo que la base de datos de la tratará como cualquier otro models.CharField establecido en Django :)

No, no hace cumplir las opciones/que no es necesario tocar su base de datos.

Cuestiones relacionadas