variable template pass form fields data python flask wtforms

python - template - Configuración de un valor predeterminado en el campo de selección, usando wtforms y matraz



form in flask (2)

Estoy creando un formulario de edición de producto y necesito que el formulario se rellene previamente con los datos anteriores.

Estoy haciendo lo siguiente:

Product(form): product = TextField(''name'') category = SelectField(''category'', choice=[(1,''one''),(2,''two'')])

En la vista:

form.product.data = ''A product name from the database'' form.category.data = ''a category name'' #This does not work

El problema es con el SelectField.

Entiendo que hay un valor ''predeterminado'' que puedo establecer en SelectField. Sin embargo, esto sucede en la clase de definición de formulario y no tengo el objeto de consulta de sqlalchemy todavía.

Entonces, ¿hay alguna manera de agregar un valor predeterminado en el campo de selección en el tiempo de ejecución?


De la documentación de WTForms

Tenga en cuenta que la palabra clave de opciones solo se evalúa una vez, por lo que si desea crear una lista desplegable dinámica, deberá asignar la lista de opciones al campo después de la creación de instancias.

Product(form): product = TextField(''name'') category = SelectField(''category'')

Y luego en su opinión diga

form.category.choices = [list of choices with chosen data]

Más detalles se encuentran aquí: http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.SelectField


Si desea establecer un valor predeterminado para representar la página con el formulario, puede crear su propio formulario o establecer un valor:

class Product(Form): product = TextField(''name'') category = SelectField(''category'', choices=[(1,''one''),(2,''two'')]) # create instance with predefined value: form1 = Product(category=2) # form1.product == <input id="product" name="product" type="text" value=""> # form1.category == <select id="category" name="category"> # <option value="1">one</option> # <option selected value="2">two</option> # </select> # from1.product.data == None # form1.category.data == 2 # create own form if it need many times: Product2 = type(''Product2'', (Product,), { ''category'': SelectField(''category'', default=2, choices=[(1,''one''),(2,''two'')]) }) form2 = Product2() # form2.product == <input id="product" name="product" type="text" value=""> # form2.category == <select id="category" name="category"> # <option value="1">one</option> # <option selected value="2">two</option> # </select> # from2.product.data == None # form2.category.data == 2

Si desea establecer datos de formulario predeterminados a petición:

with app.test_request_context(method=''POST''): form = Product(request.form) # form5.category.data == None form = Product(request.form, category=2) # form5.category.data == 2 with app.test_request_context(method=''POST'', data={''category'': 1}): form = Product(request.form) # form5.category.data == 1 form = Product(request.form, category=2) # form5.category.data == 1