关于python:如何使用Flask更新db中复选框的值

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]

然后按它过滤,完成并提交。