2017-07-10 4 views
1

Je crée une application Web, où l'action de l'utilisateur peut affecter certains graphiques à barres (voir le fichier GIF ci-dessous). Parfois, les modifications ne sont pas enregistrées. Lorsque je recharge la page, les graphiques à barres modifiés sont affichés (indiquant que les actions de l'utilisateur ont été sauvegardées). Lorsque je recharge à nouveau la page, les graphiques à barres mis à jour et la liste correspondante sont parfois affichés. D'autres fois, ils ne le sont pas.Les modifications de Flask-SQLAlchemy ne persistent pas

The bug in action

est ici le code de la vue:

@app.route('/') 
def home(): 
    '''homepage for application''' 

    # redirect users who go to home page but aren't logged in 
    if not current_user.is_authenticated: 
     return redirect(url_for("landing")) 

    # reset the session 
    db.session.flush() 

    # get most recent entered weight 
    try: 
     last_weight = WeightEntry.query.filter_by(user_id = current_user.user_id).order_by(WeightEntry.date)[-1] 
    except IndexError: 
     return error("No weight recorded. Please contact support.") 

    return render_template("home.html", 
          today= Today(current_user.user_id), 
          foods = [food for food in FoodEntry.query.filter_by(user_id=current_user.user_id).all() if food.is_today() == True], 
          options = sorted(Food.query.filter(Food.user_id==current_user.user_id).all(), key=lambda x: x.name), 
          last_weight = last_weight) 

J'ai ajouté le db.session.flush() pour tenter de résoudre le problème, mais cela ne fonctionne pas.

Les changements (aliments) enregistrés sont stockés ici:

@app.route("/log_food", methods=["POST", "GET"]) 
@login_required 
def log_food(): 
    # add foods given by the user 
    if request.method == "POST": 
     for food in request.form.getlist("logged_food"): 
      try: 
       added_food = Food.query.filter_by(user_id=current_user.user_id, name=food).first() 
       x = FoodEntry(
        food_id = added_food.food_id, 
        user_id = current_user.user_id) 
       db.session.add(x) 
       db.session.commit() 
      except: 
       return error("Unable to log food.") 

     return redirect(url_for("home")) 

J'apprécierais toute aide possible.

Merci!

+0

ajoutez le code où vous enregistrez les modifications, s'il vous plaît et la configuration du moteur – Busturdust

Répondre

0

Je l'ai corrigé en ajoutant db.session.commit() aux fonctions de la page.

Par exemple, pour la page d'accueil: Je l'ai fait:

@app.route('/') 
def home(): 
    '''homepage for application''' 

    db.session.commit() 
    ...