wtf validators validate_on_submit template flaskform fileallowed python flask wtforms

python - validators - ¿Cómo se establece un valor predeterminado para un WTForms SelectField?



wtforms fileallowed (5)

Cuando intento establecer el valor predeterminado de un SelectField con WTForms, paso el valor al parámetro ''default'' como ese.

class TestForm(Form): test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=2)

También he intentado lo siguiente.

class TestForm(Form): test_field = SelectField("Test: ", choices=[(1, "Abc"), (2, "Def")], default=(2, "Def"))

Tampoco establezca el campo seleccionado predeterminado en "Def". Esto funciona para otros tipos de campos como TextField. ¿Cómo se configura el valor predeterminado para SelectField? ''


Creo que este problema se debe a que el atributo de data del Field anula el default con algo que WTForms no comprende (por ejemplo, un objeto modelo de DB: espera un int ). Esto sucedería si ha rellenado su formulario en el constructor de la siguiente manera:

form = PostForm(obj=post)

la solución es configurar manualmente el atributo de data vez que se haya rellenado el formulario:

form = PostForm(obj=post) form.category.data = (post.category.id if page.category else 0) # I make 0 my default


Esta es una configuración de choices con SelectField cuando usa un int , funciona así:

test_select = SelectField("Test", coerce=int, choices=[(0, "test0"), (1, "test1")], default=1)

o:

class TestForm(Form): test_select = SelectField("Test", coerce=int) @app.route("/test") def view_function(): form = TestForm() form.test_select.choices = [(0, "test0"), (1, "test1")] form.test_select.default = 1 form.process()


Hay algunas maneras de hacer esto. Su primer fragmento de código es realmente correcto.

Si desea hacer esto en una vista de forma dinámica, también puede hacer:

form = TestForm() form.test_field.default = some_default_id form.process()


La primera forma en que publicaste es correcta, y funciona para mí. La única explicación de que no funciona es que estás ejecutando una versión anterior de WTForms, funcionó para mí en 1.0.1


Flask-WTF 0.14.2 usuario aquí. Entonces esta respuesta es para cualquiera que tenga un problema similar conmigo.

Básicamente, ninguna de las soluciones anteriores funciona correctamente con form.validate_on_submit() .

El establecimiento de form.test_field.data cambiará el valor predeterminado cuando se carga la página, pero los datos permanecen igual después de validate_on_submit (los cambios de usuario en el navegador no tienen efecto).

Establecer form.test_field.default luego llamar a form.process() también cambia el valor cuando se carga la página, pero validate_on_submit fallará.

Aquí está la nueva forma de hacerlo:

class TestForm(Form): test_field = SelectField("Test", choices=[(0, "test0"), (1, "test1")]) @app.route("/test") def view_function(): form = TestForm(test_field=1) if form.validate_on_submit(): ...