Tengo una pregunta sobre mi implementación de WTForms SelectMultipleField.
Cada vez que se envía el formulario y se verifica la base de datos, solo encuentro los primeros datos ingresados por el usuario, no la lista completa. ¿Cómo podría funcionar esta implementación para toda la lista de resultados enviados?
Esto es lo que muestra en la base de datos
IDENTIFICACIÓN | colores_favoritos |
---|---|
1 | Azul |
2 | Rojo |
Y esto es lo que debería mostrarse según la entrada del usuario
IDENTIFICACIÓN | colores_favoritos |
---|---|
1 | amarillo, rojo, azul |
2 | rojo, amarillo |
formularios.py
class ColorForm(FlaskForm): fav_colors = SelectMultipleField( ' Select your Colors:', choices = [ ( 1, 'Blue'), ( 2, 'Red'), ( 3, 'Yellow') ])
rutas.py
@route.('pick-your-color.html', methods=['GET', 'POST']) def pick_your_color(): form = ColorForm(request.form) form.fav_colors.data = None if request.method == "POST": fav_colors = request.form['fav_colors'] register_colors = Colors(fav_colors = fav_colors) db.session.add(register_colors) db.session.commit() return render_template('index.html')
modelo.py
class Colors(db.Model): __tablename__ = "PickedColors" id = Column(integer, primary_key=True) fav_colors = Column(String)
elige-tu-color.html
{% extendes "layout/base.html" %} {{ form.fav_colors.label }} {{ form.fav_colors(class="form-control", id=fav-colors") }} {% block javascripts %} //multiple select field var selectStatesInputEl = d.querySelector('#fav-colors'); if(selectStatesInputE1) { const choices = new Choices(selectStatesInputE1); } {% endblock javascripts %}
PD: estoy usando este JS para poder hacerlo como la plantilla que estoy usando
La respuesta es bastante simple:
fav_colors = request.form.getlist('fav_colors')
Hay una pregunta similar a este problema @ Flask App usando WTForms con SelectMultipleField