2017-07-10 5 views
1

Ich mache eine Webanwendung, bei der Benutzeraktionen einige Balkendiagramme beeinflussen können (siehe gif unten). Manchmal werden Änderungen nicht gespeichert. Wenn ich die Seite neu lade, werden die geänderten Balkendiagramme angezeigt (um anzuzeigen, dass die Aktion des Benutzers gespeichert wurde). Wenn ich die Seite erneut lade, werden manchmal die aktualisierten Balkendiagramme und die entsprechende Liste angezeigt. Andere Zeiten sind sie nicht.Flask-SQLAlchemy-Änderungen bleiben nicht erhalten

The bug in action

Hier ist der Code für die Ansicht:

@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) 

ich die db.session.flush() in einem Versuch hinzugefügt, um das Problem zu lösen, aber das hat nicht funktioniert.

Die Änderungen (angemeldet Lebensmittel) werden hier gespeichert:

@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")) 

ich jede Hilfe dankbar würde ich bekommen kann.

Danke!

+0

den Code hinzufügen, wo Sie die Änderungen speichern bitte, und die Motorkonfiguration – Busturdust

Antwort

0

Ich habe es behoben, indem ich db.session.commit() zu den Seitenfunktionen hinzugefügt habe.

Zum Beispiel für die Homepage: Ich habe:

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

    db.session.commit() 
    ... 
Verwandte Themen