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>
