flask-sqlalchemy将非预期的变量存储到数据库中

时间:2015-04-21 07:28:33

标签: python flask flask-sqlalchemy

我正在用烧瓶建立一个简单的Q& A(采访和回答)。 相关代码如下:

@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. 回答问题和POST到服务器
  3. 将答案插入数据库 相应的问题ID(一对多关系)
  4. 但是,我得到的是:

    • 当用户提交答案时,答案将被插入到数据库中 不同的问题ID

    我认为生成随机数有问题,它会生成不同的随机整数以供查看和插入。

1 个答案:

答案 0 :(得分:1)

您应该以某种方式检索question_id并在尝试保存answer时使用它。例如,您可以将隐藏字段添加到应存储问题ID的表单中。在您的视图中,您应该使用表单中提供的question_id(发布数据)来获取问题对象。

另一种方法是,您可以将问题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)
    ...