2011-01-14 14 views
6

Todos los ejemplos de formularios web.py están en el siguiente formato (de webpy.org):¿Cómo llenar dinámicamente un cuadro de selección/desplegable en un formulario usando web.py?

myform = form.Form( 
    form.Textbox("boe"), 
    form.Textbox("bax", 
     form.notnull, 
     form.regexp('\d+', 'Must be a digit'), 
     form.Validator('Must be more than 5', lambda x:int(x)>5)), 
    form.Textarea('moe'), 
    form.Checkbox('curly'), 
    form.Dropdown('french', ['mustard', 'fries', 'wine'])) 

class index: 
    def GET(self): 
     form = myform() 
     # make sure you create a copy of the form by calling it (line above) 
     # Otherwise changes will appear globally 
     return render.formtest(form) 

    def POST(self): 
     form = myform() 
     if not form.validates(): 
      return render.formtest(form) 
     else: 
      # form.d.boe and form['boe'].value are equivalent ways of 
      # extracting the validated arguments from the form. 
      return "Grrreat success! boe: %s, bax: %s" % (form.d.boe, form['bax'].value) 

no quiero llenar el cuadro desplegable (form.Dropdown en el ejemplo anterior) estática cuando se declara la formulario, pero en el método GET/POST utilizando entradas recuperadas de una tabla de base de datos cuando se llama a la página.

He buscado durante un par de horas, pero no puedo encontrar una pista en cualquier lugar (Google, webpy.org, Grupos de Google)

Respuesta

2

Sugiero crear los otros elementos y la forma, a continuación, en GET/POSTAL crear el elemento desplegable que desee y:

# Create copy of the form 
form = myform() 

# Append the dropdown to the form elements. 
form.inputs = tuple(list(form.inputs) + [mydropdown]) 
+2

No creo que sea bueno parchar las entradas de formulario en este caso (pero puede ser útil en alguna otra situación). Para este caso en particular, sugiero crear 'Dropdown' con' args = [] 'y luego establecer' args' de dropdown en la copia del formulario. –

3

sé que esto fue publicada hace un tiempo, pero me hizo esto estableciendo el valor después, como en:

form = input_form() 
form.get('some_input').value = _id 
return render.some_template(form) 

esto le permite a utilizar el validación incorporada también si lo desea. Terminé encontrando un ejemplo como este en los tableros, así que es probable que esté enterrado en cuanto a la documentación.

4

Puede declarar el formulario pasando lista vacía a form.Dropdown args, y luego establecer args en su código.

# form declaration 
MyForm = form.Form(form.Dropdown("french", [])) 

# then in your controller 
my_form = MyForm() 
my_form.french.args = ['mustard', 'fries', 'wine'] 

También por favor, no use form para la variable, debido al nombre enfrentamiento con web.form.

Cuestiones relacionadas