How to update value of checkbox in db using Flask
本问题已经有最佳答案,请猛点这里访问。
尝试用flask和sqlacalchemy做一个简单的to do应用程序,因为我以前从未在flask中使用过复选框,所以我遇到了以下问题。
应用程序是
1 2 3 4 5 6 7 8 9 10 | class Todo(db.Model): id = db.Column(db.Integer, primary_key=True) text = db.Column(db.String(200)) complete = db.Column(db.Boolean) @app.route('/update', methods=['POST']) def update(): print(request.form) return redirect(url_for('index')) |
HTML是:
1 2 3 4 5 6 7 8 9 10 11 | <ul> {% for todo in incomplete %} <li> <input id="checkbx" name="{{ todo.id }}" type="checkbox"> {{ todo.text }} </li> {% endfor %} </ul> |
当我,
1 | print(request.form) |
选中复选框以完成TODO任务并单击"更新"按钮后,控制台将打印出:
1 | ImmutableMultiDict([('11', u'on')]) |
如何更新数据库以将完整值从"0"更改为"1"?
1 | print(request.form['checkbx']) |
gives a 400 Bad Request
1 | request.form.get('checkbx') |
returns None
1 | todo = request.form.getlist('checkbx') |
returns []
我想我需要做些什么,比如:
1 | todo = Todo.query.filter_by(int(id)).first() |
那么我可以
1 2 | todo.complete = True db.session.commit() |
我怎样才能从这个不变的多维数据块(在本例中是"11")中获取ID????
您可以将不可变的multipct转换为dict
1 | todo = dict(request.form).keys[0] |
然后按它过滤,完成并提交。