我有一个模板,允许用户编辑他们的用户信息。
<form method="post">
<table>
<tr>
<td>Username:</td>
<td>{{user['username']}}</td>
</tr>
<tr>
<td>New Password:</td>
<td> <input type="password" name="password"></td>
<td>{% if form.password.errors %} {{form.password.errors}} {% endif %}<td>
</tr>
<tr>
<td>Re-enter Password:</td>
<td> <input type="password" name="confirm_password">
</td>
</tr>
<input type='hidden' name='username' value="{{user['username']}}">
<tr>
<td><input type="submit" value="Submit"></td>
</tr>
</table>
</form>
我还有一个用于处理用户编辑的视图功能。我目前使用的数据库是MongoDB和MongoKit模块。到目前为止,我只能在视图功能中做到这一点,但没有运气。
def edit():
username = request.args.get('user')
user = User.find_one({'username':username}) # Is this a correct way of doing it?
form = UserForm(**what should be placed here?**, obj=user)
if request.method == 'POST' and form.validate():
form.populate_obj(user)
user.save()
return 'updated'
return render_template('edituser.html', form=form, user=user)
为此我正在经历populate_obj(obj)。我在这件事上找不到多少帮助。我应该怎么做才能让populate_obj()
工作?
答案 0 :(得分:15)
UserForm
应该传递request.form
以使用POST请求中可用的值(如果有)填充它。
form = UserForm(request.form, obj=user)
答案 1 :(得分:6)
您使用的是Flask-WTF吗?如果是这样,请查看以下示例代码:
https://github.com/sean-/flask-skeleton/blob/master/skeleton/modules/aaa/views.py#L13
具体来说,你会:
def edit():
form = UserForm()
if form.validate_on_submit():
# Commit your form data
最重要的是,如果您使用Flask-WTF
,我不确定您的问题是什么。如果您未使用Flask-WTF
,请使用Flask-WTF
。
答案 2 :(得分:2)
对于Flask-WTF,你可以像
一样写form = UserForm(obj=user)
Thant会工作!