flask wtforms
Verfasst: Mittwoch 16. September 2020, 07:21
Guten Morgen,
ich versuche in einem Texteingabefeld Daten anzuzeigen, die dann editiert werden können. In einem Auswahlfeld wird ein Datensatz ausgewählt, die Auswahl wird mit einem Submit (post) abgeschickt und dann sollen die Eingabefelder aktualisiert werden.
Beim Stringfield funktioniert das prima, beim Integerfield geht es nicht.
Warum ist das so?
Eine Lösung wäre
Ist das grundsätzlich der bessere Weg?
Hier der ganze Beispielcode:
Viele Grüße
ich versuche in einem Texteingabefeld Daten anzuzeigen, die dann editiert werden können. In einem Auswahlfeld wird ein Datensatz ausgewählt, die Auswahl wird mit einem Submit (post) abgeschickt und dann sollen die Eingabefelder aktualisiert werden.
Code: Alles auswählen
data = Datatable.query.filter_by(id=form.selection.data).first()
form.string_data.data = data.string_data
form.integer_data.data = data.integer_data
Warum ist das so?
Eine Lösung wäre
Code: Alles auswählen
{{ form.integer_data(value=form.data.integer_data) }}Hier der ganze Beispielcode:
Code: Alles auswählen
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, SelectField, SubmitField
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SECRET_KEY'] = 'ed20926b80c986c23d4d955401e78118'
db = SQLAlchemy(app)
class Datatable(db.Model):
id = db.Column(db.Integer, primary_key=True)
string_data = db.Column(db.String(30), unique=True, nullable=False)
integer_data = db.Column(db.Integer, nullable=False)
class Testform(FlaskForm):
selection = SelectField('Auswahl', choices=[])
submit = SubmitField('submit')
string_data = StringField('Stringfield')
integer_data = IntegerField('Integerfield')
@app.route('/', methods=['GET', 'POST'])
def index():
form = Testform()
select_list = []
entries = Datatable.query.all()
for entry in entries:
select_list.append([str(entry.id), " ".join([entry.string_data, str(entry.integer_data)])])
form.selection.choices = select_list
if request.method == 'POST':
for key in request.form.keys():
print(key, request.form[key])
data = Datatable.query.filter_by(id=form.selection.data).first()
form.string_data.data = data.string_data
form.integer_data.data = data.integer_data
return render_template('show_test_form.html', form=form)
# def create_db():
# db.create_all()
# for entry in [Datatable(string_data='Hans', integer_data=20),
# Datatable(string_data='Peter', integer_data=30),
# Datatable(string_data='Ulli', integer_data=40)]:
# db.session.add(entry)
# db.session.commit()
if __name__ == '__main__':
app.run(debug=True)
Code: Alles auswählen
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Testform</title>
</head>
<body>
<form method="post" action="">
{{ form.hidden_tag() }}
<br>
{{ form.selection() }}
{{ form.submit() }}
<br><br>
{{ form.string_data.label() }}
{{ form.string_data() }}
<br>
{{ form.integer_data.label() }}
{{ form.integer_data() }}
</form>
</body>
</html>