我对Flask框架相当陌生,并且正在为Webportal创建编辑配置文件页面。我被困在某个位置,无法自动填写表格。
这是我的表格课:
class EditProfile(Form): username = TextField('Username', [Required()]) email = TextField('Email', [Required()]) about = TextAreaField('About', [Required()]) website = TextField('Website', [Required()])
这是我评估表格的功能。
def editprofile(nickname = None): if g.fas_user['username'] == nickname or request.method == 'POST': form = EditProfile() form_action = url_for('profile.editprofile') if request.method == 'POST' and form.validate(): if form.username.data == nickname : query = EditProfile(form.username.data, form.email.data, form.about.data, form.website.data, ) print query #debug db.session.add(query) db.session.commit() flash('User Updated') print "added" return(url_for('profile.editprofile')) return render_template('profile/add.html', form=form, form_action=form_action, title="Update Profile") else: return "Unauthorised"
而我的html表单模板是:
{% extends "base.html" %} {% block title %} {{ title }} {% endblock %} {% block content %} {% from "_formhelpers.html" import render_field %} <div id="Edit Profile"> <h2>{{ title }}</h2> <form method="post" action="{{ form_action }}"> <fieldset> <legend></legend> {{ render_field(form.username) }} {{ render_field(form.email)}} {{ render_field(form.about )}} {{ render_field(form.website) }} </fieldset> <input type="submit" class="button" value="Save"/> </form> </div> {% endblock %}
我有一个用户类的对象。然后我要从该对象中预填此表单。如何预填充表单中的值。我正在尝试在此处实现编辑配置文件功能。
创建对象时,需要将其传递给表单。
form = EditProfile(obj=user) # or whatever your object is called
你将遇到一些麻烦
query = EditProfile(form.username.data, form.email.data, form.about.data, form.website.data, ) db.session.add(query)
它创建EditProfile表单的新实例。然后,你尝试将其添加到会话中。会话需要模型,而不是表单。
相反,在验证表单之后,可以将其值与对象相关联。
form.populate_obj(user) # or whatever your object is called
因为你的对象已被加载,所以你无需将其添加到会话中。你可以删除db.session.add(query)并致电db.session.commit()。
db.session.add(query)
db.session.commit()