flask-sqlalchemy 将不需要的变量存储到数据库中
flask-sqlalchemy stores unintended variables into database
我正在用 Flask 构建一个简单的问答(采访和回答)。
相关代码如下:
@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)
预期结果是:
- 用户看到生成的随机问题
- 问题的答案和 POST 到服务器
- 将答案插入数据库
对应问题id(一对多关系)
然而,我得到的是:
- 当用户提交答案时,答案被插入到数据库中
不同的问题 id
我认为生成随机数有问题,它会生成不同的随机整数以供查看和插入。
您应该以某种方式检索 question_id
并在尝试保存 answer
时使用它。例如,您可以将隐藏字段添加到应该存储问题 ID 的表单中。在您看来,您应该使用表单(post 数据)提供的 question_id 获取问题对象。
另一种方法,您可以将 question_id 添加到您的 url 架构中,如下所示:
@blueprint.route("/interview/", methods=['GET'])
@blueprint.route("/interview/<int:question_id>", methods=['POST'])
def interview(question_id=None):
...
question=Question.query.get(question_id)
...
我正在用 Flask 构建一个简单的问答(采访和回答)。 相关代码如下:
@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)
预期结果是:
- 用户看到生成的随机问题
- 问题的答案和 POST 到服务器
- 将答案插入数据库 对应问题id(一对多关系)
然而,我得到的是:
- 当用户提交答案时,答案被插入到数据库中 不同的问题 id
我认为生成随机数有问题,它会生成不同的随机整数以供查看和插入。
您应该以某种方式检索 question_id
并在尝试保存 answer
时使用它。例如,您可以将隐藏字段添加到应该存储问题 ID 的表单中。在您看来,您应该使用表单(post 数据)提供的 question_id 获取问题对象。
另一种方法,您可以将 question_id 添加到您的 url 架构中,如下所示:
@blueprint.route("/interview/", methods=['GET'])
@blueprint.route("/interview/<int:question_id>", methods=['POST'])
def interview(question_id=None):
...
question=Question.query.get(question_id)
...