2017-03-06 81 views
-2

我必须有条件删除数据库条目,我无法弄清楚,因为表单要求在uri中发布正确的参数。我可以用相同的代码删除shell中的条目,但不能查看。以下是视图和表单:Flask + SqlAlchemy删除数据库条目

@app.route('/cancelannualsub/<int:student_id>', methods=['DELETE']) 
def cancel_yearly_rec(student_id): 

    if not user_authorized(): 
     return redirect('/') 

    user = get_profile_data(session['auth_token']) 
    profile_data = user['StudentProfile'] 

    pkg = Package.query.filter_by(student_id=profile_data.id).first_or_404() 

    if request.method=='POST': 
     try: 
      pkg = Package() 
      dbase.session.delete(pkg) 
      flash('Package deleted successfully.') 
      dbase.session.commit() 
     except: 
      pass 


     return redirect('plans') 
    return render_template('profile/cancel/cancel.html') 

形式:

<form action="{{ url_for('cancel_yearly_rec', student_id=***can't render value here***) }}" method='post'> 
        <input type='hidden' name='_method' value='DELETE' 
        <input class='btn' type="submit" value="Cancel" /> 
       </form> 

我从计算器例子尝试不同的东西。如果我做错了什么或者是否有更好的方法,请协助。

+0

这里有一个错字'pkg = Pacakge()','pacakge' - >'package' – Arman

+0

原始代码中没有错误...我检查了。现在,我在什么地方添加student_id =“在这里添加什么”。 –

+0

“无法在这里呈现价值”是什么意思?你可能在模板中有学生对象,所以把它放在那里:'student_id = student.id'。见[mcve]。 – davidism

回答

0

我没有使用适当的格式在try块内渲染模型对象。

它应该是这样的:

mymodel = Model.query.filter_by(variable=some_field_data).first_or_404() 
dbase.session.delete(mymodel) 
dbase.session.commit() 

对于读者不要混淆与“质数据库”,因为我做了这个进口,如: 从应用程序导入db作为dbase 您可以通过简单地将其导入:

from app import db 

或者添加“as anything”。 然后,您可以在您导入的文件的其余部分引用任何内容。

相关问题