0

これは、この質問の続きです: 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)
4

1 に答える 1