Python WTForms obj=sqlalchemy.Model不工作?
我用的是烧瓶,还有SQLAlchemy和WTForms。以下是我的片段: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
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来创建/更新它。这样就行了。