使用SQLAlchemy对象中的数据预填充flask中的WTforms

我对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()

以上是 使用SQLAlchemy对象中的数据预填充flask中的WTforms 的全部内容, 来源链接: utcz.com/qa/420620.html

回到顶部