これは、この質問の続きです: SQLalchemy/wtforms update issue - 400 bad request 私はフラスコ フレームワークを持っています
問題
フォームを送信すると、予測が追加されたことを示すフラッシュメッセージが表示されますが、データベースにクエリを実行しても何も変更されていませんか?? 誰かが私が間違っている場所を見つけることができますか?
私は何を達成しようとしていますか
ユーザーは、自分の予測を表示して、現在の予測に変更を加えることができます。新しい予測がない場合は、新しい予測を送信できます。
ビュー
# Predictor - User makes predictions and saves/
@app.route('/predictor/',methods=['GET','POST'])
@login_required
def predictions():
user_id = g.user.id
# retrieve predictions
prediction= db.session.query(Fixture_prediction,\
Fixture_prediction.fixture_id,Fixture.stage,\
Fixture.home_team,Fixture_prediction.home_score,\
Fixture_prediction.away_score,Fixture.away_team)\
.outerjoin(Fixture,Fixture.id==Fixture_prediction.fixture_id)\
.outerjoin(User,Fixture_prediction.user_id == User.id)\
.filter(Fixture_prediction.fixture_id==Fixture.id)\
.filter(Fixture_prediction.user_id==user_id).all()
data = {'predictions': prediction}
form = PredictionListForm(data=MultiDict(data))
if request.method == 'POST':
if form.validate() == False:
flash('A score is missing, please fill in all predictions')
render_template('predictor.html', form=form)
else:
for prediction in form.predictions:
store=db.session.query(Fixture_prediction) \
.filter(Fixture_prediction.user_id==user_id) \
.filter(Fixture_prediction.fixture_id==prediction.fixture_id.data)\
.update({'home_score':prediction.home_score.data\
,'away_score':prediction.away_score.data})
db.session.commit()
flash('Prediction added')
return redirect(url_for('predictions'))
# display current predictions
elif request.method == 'GET':
return render_template('predictor.html', form=form)
以下 は、フォームリクエストではなく、最初にすでにあったものを送信しているだけだと感じています...
.update({'home_score':prediction.home_score.data\
,'away_score':prediction.away_score.data})
テンプレート
{% extends "base.html" %}
{% block content %}
<h1>Predictions</h1>
<p></p>
<p>Please make your predictions here</p>
<form action='' method='post'>
{{form.predictions()}}
<p><input type="submit" value="Submit Predictions"></p>
</form>
{% endblock %}
テンプレート - 代替
{% extends "base.html" %}
{% block content %}
<h1>Predictions</h1>
<p></p>
<p>Please make your predictions here</p>
<form action='' method='post'>
<table>
{%for form in form.predictions%}
<tr>
<td>{{form.fixture_id.data}}</td>
<td>{{form.stage.data}}</td>
<td>{{form.home_team.data}}</td>
<td>{{form.home_score(size=1)}}</td>
<td>{{form.away_score(size=1)}}</td>
<td>{{form.away_team.data}}</td>
</tr>
{%endfor%}
</table>
<p><input type="submit" value="Submit Predictions"></p>
</form>
{% endblock %}
モデル
# Fixture prediction table
class Fixture_prediction(db.Model):
__tablename__ = "fixture_prediction"
id = db.Column('fixture_prediction_id',db.Integer, primary_key = True)
fixture_id = db.Column('fixture_id',db.Integer, db.ForeignKey('fixture.fixture_id'))
user_id = db.Column('user_id',db.Integer, db.ForeignKey('user.user_id'))
home_score = db.Column('home_score',db.Integer)
away_score = db.Column('away_score',db.Integer)