2011-11-24 6 views
8

Utilizo el administrador django para actualizar varios datos en la base de datos MySQL. Uso el administrador básico de django para esto. Al ingresar datos nuevos, me gustaría poder tenerlos para que las personas solo puedan seleccionar entre algunas opciones para ingresar nuevos datos de texto.Administrador de Django Selecciones desplegables

Por ejemplo: La tabla contiene los colores, así que en vez de dejar que la persona admin (datos de entrada individual en nuestro caso) acaba de entrar en cualquier cosa en el cuadro de texto, ¿cómo puedo obtener la administración de Django que sólo les dará varias opciones ¿Para escoger de?

Respuesta

18

Esto se puede hacer mediante el argumento campo del modelo choices

myfield = models.CharField(max_length=256, choices=[('green', 'green'), ('red', 'red')] 

El único problema con esto es que si ya tiene un valor en la base de datos que no coincide con uno de estos, sólo podría Django por defecto a una de las opciones.

Si eso es un problema y desea conservar esos valores, podría anular el formulario de administrador y solo proporcionar el ChoiceField en las operaciones de agregar o agregar dinámicamente lo que está en el DB como una de las opciones válidas.

class MyForm(ModelForm): 
    MY_CHOICES = [('green', 'green'), ('red', 'red')] 
    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     if self.instance.id: 
      CHOICES_INCLUDING_DB_VALUE = [(self.instance.field,)*2] + self.MY_CHOICES 
      self.fields['my_field'] = forms.ChoiceField(
       choices=CHOICES_INCLUDING_DB_VALUE) 


class MyAdmin(admin.ModelAdmin): 
    form = MyForm 
+0

lo uso con flotadores: myfield = models.FloatField (opciones = [('1.0', '1')] y obtener un mensaje ("no correcta selección 1.0") cuando se utiliza el menú desplegable en el admin editar. – Timo

Cuestiones relacionadas