2011-01-25 27 views
15

Tengo un formulario en mi forms.py que tiene este aspecto:rellenar un formulario de Django con los datos de la base de datos en vista

from django import forms 

class ItemList(forms.Form): 
    item_list = forms.ChoiceField() 

necesito para poblar el item_list con algunos datos de la base de datos. Cuando se genera en HTML item_list debería ser algo como:

<select title="ItemList"> 
    <option value="1">Select Item 1</option> 
    <option value="2">Select Item 2</option> 
</select> 

Los valores de las opciones en mi instrucción de selección cambiará casi todo el tiempo ya que una variable en la consulta a menudo cambiar la generación de nuevos resultados.

¿Qué debo poner en la view.py y también en mis archivos de plantilla para rellenar la Lista de artículos con los valores de la base de datos?

Respuesta

25

Tome un vistazo a este ejemplo en la documentación de Django:

Básicamente, se puede utilizar el argumento queryset palabra clave en un objeto de campo, para agarrar las filas de la base de datos:

class BookForm(forms.Form): 
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all()) 

actualización

Si necesita un campo dinámico modelo de elección, puede entregar su ID de artículo en el constructor de la forma y ajustar el conjunto de consultas en consecuencia:

class ItemForm(forms.Form): 

    # here we use a dummy `queryset`, because ModelChoiceField 
    # requires some queryset 
    item_field = forms.ModelChoiceField(queryset=Item.objects.none()) 

    def __init__(self, item_id): 
     super(ItemForm, self).__init__() 
     self.fields['item_field'].queryset = Item.objects.filter(id=item_id) 

P. S. No he probado este código y no estoy seguro acerca de su configuración exacta, pero espero que la idea principal se manifieste.

Recursos:

+0

El problema es que toda mi lógica pasa en el view.py no en el forms.py. El conjunto de preguntas se parece más a esto Items.objects.filter (item_id = id). La variable "id" se genera en view.py. – avatar

+0

¿Qué sucede si agrega otro parámetro al constructor de forma de libro? – amcashcow

+0

@itgorilla: Actualicé mi publicación. – miku

Cuestiones relacionadas