2015-04-21 42 views
1

我正在用燒瓶構建一個簡單的Q & A(面試和回答)。 相關的代碼如下:flask-sqlalchemy將意外變量存儲到數據庫中

@blueprint.route("/interview/", methods=['GET', 'POST']) 
def interview(): 
    rows = Question.query.count() #counts number of rows 
    r = random.randint(1,rows)  #picks a number from 1 to 'rows' 
    question=Question.query.get(r) #queries the index generated by randint 

    user=User.query.get(session['user_id']) #gets session data 
    created_at='' 
    form = InterviewForm() 
    if form.validate_on_submit(): 
     new_answer = Answer.create(text=form.answer.data, user=user, question=question, created_at=created_at) #basically a method that combines db.session.add and db.session.commit 
     flash("Your answer has been submitted") 
     return redirect(url_for('interview.list', question=question.id)) 
    return render_template("interview/interview.html", form=form, question=question) 

預期的結果是:

  1. 用戶將看到一個生成的隨機問題
  2. 問題的答案併發布到服務器
  3. 插入答案數據庫與 對應的問題ID(一對多關係)

但是,我得到的是:

  • 當用戶提交了答案,答案被插入到數據庫 不同的問題ID

我覺得有什麼不妥產生的隨機數,即它會爲查看和插入生成不同的隨機整數。

回答

1

您應該以某種方式檢索question_id並在嘗試保存answer時使用它。例如,您可以添加隱藏字段以形成應存儲問題ID的表單。在你看來,你應該使用從表單提供的question_id來獲取問題對象(發佈數據)。

的另一種方式,你可以question_id添加到您的網址模式,就像這樣:

@blueprint.route("/interview/", methods=['GET']) 
@blueprint.route("/interview/<int:question_id>", methods=['POST']) 
def interview(question_id=None): 
    ... 
    question=Question.query.get(question_id) 
    ... 
+0

的感謝!多數民衆贊成我也懷疑。 –