Python WTForms obj=sqlalchemy.Model不工作?

Python WTForms obj=sqlalchemy.Model不工作?,python,flask,sqlalchemy,wtforms,Python,Flask,Sqlalchemy,Wtforms,我用的是烧瓶,还有SQLAlchemy和WTForms。以下是我的片段: class AccountForm(Form): name = StringField(validators=[validators.Optional(),], filters = [lambda x: x or None]) email = StringField(validators=[validators.Optional(), validators.Email()], filters

我用的是烧瓶,还有SQLAlchemy和WTForms。以下是我的片段:

class AccountForm(Form):
    name     = StringField(validators=[validators.Optional(),], filters = [lambda x: x or None])
    email    = StringField(validators=[validators.Optional(), validators.Email()], filters = [lambda x: x or None])
    password = PasswordField(validators=[validators.Optional()], filters = [lambda x: x or None])


class Account(Model):
    __tablename__   = 'accounts'

    id              = db.Column(db.Integer, primary_key=True)
    name            = db.Column(db.String(250), nullable=False)
    email           = db.Column(db.String(250), nullable=False, unique=True)
    password        = db.Column(db.String(250), nullable=True, default=None)
然后,我仅使用
名称
参数向
/account/
发出PUT请求:

@app.route("/account/", methods=['PUT',])
@authenticated
def update():
    # g.account contains the instance of the Model Account
    form = AccountForm(request.form, obj=g.account)


    # form.email.data is empty !
    # It should be set at the value from the Account model ?!

    if not form.validate():
        return form.errors_as_json()

    form.email.data is None # True
我遵循文档,尝试了一些替代方法(
populate_obj
,等等),但运气不好,我无法将模型中的数据加载到表单中

我错过了什么


提前谢谢。

为什么要传入
request.form
和模型实例?要填充表单,WTForms首先检查是否提供了formdata,然后将检查
obj
。删除
请求。表单
并重试。否。我最后分析了代码,并且遵循了逻辑:它首先从
formdata
参数(第一个参数)中获取参数,如果不存在,则从
obj
参数中获取值。问题出在外面:在StringField中(例如,
process\u formdata
返回
formdata
中的值(如果存在),或者返回空字符串。由于它返回一个空字符串,WTForms不会进一步检入
obj
。。。所以我的问题就在这里,有着同样的问题@西里尔。你设法解决了吗?是和否。我无法让它工作,所以我创建了一个扩展表单类(我所有的表单,如
AccountForm
扩展了我所定义的基本表单),其中包含一个
get\u as\u dict
方法。然后,我对我所有的模型都做了同样的操作,以获得一个dict来创建/更新它。它就是这样工作的。为什么要传入
request.form
和模型实例?要填充表单,WTForms首先检查是否提供了formdata,然后将检查
obj
。删除
请求。表单
并重试。否。我最后分析了代码,并且遵循了逻辑:它首先从
formdata
参数(第一个参数)中获取参数,如果不存在,则从
obj
参数中获取值。问题出在外面:在StringField中(例如,
process\u formdata
返回
formdata
中的值(如果存在),或者返回空字符串。由于它返回一个空字符串,WTForms不会进一步检入
obj
。。。所以我的问题就在这里,有着同样的问题@西里尔。你设法解决了吗?是和否。我无法让它工作,所以我创建了一个扩展表单类(我所有的表单,如
AccountForm
扩展了我所定义的基本表单),其中包含一个
get\u as\u dict
方法。然后,我对我所有的模型都做了同样的操作,以获得一个dict来创建/更新它。这样就行了。