Flask WTF无法从提供的obj或输入数据/默认值中找到要填充的值



我在WTForm中使用python Flask,并且populate_obj方法存在严重问题:

Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 2088, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 2073, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "/app/my_data/main.py", line 29, in submit
form.populate_obj(demande)
File "/usr/local/lib/python3.9/site-packages/wtforms/form.py", line 95, in populate_obj
field.populate_obj(obj, name)
File "/usr/local/lib/python3.9/site-packages/wtforms/fields/core.py", line 877, in populate_obj
raise TypeError('populate_obj: cannot find a value to populate from the provided obj or input data/defaults')
TypeError: populate_obj: cannot find a value to populate from the provided obj or input data/defaults

这是我的代码(没什么特别的(:

form = DemandeForm(data=request.form)
if form.validate():
form.populate_obj(demande)
flash('Enregistré', 'success')
return redirect(url_for('main.index'))

我可以详细列出所有表单字段,但这会很乏味。我的猜测是,这与我正在使用的嵌套表单有关:

class DemandeForm(BaseForm):
AdressePrivee = FormField(AdresseForm)
AdresseProfessionnelle = FormField(AdresseForm)
Prestations = FieldList(FormField(PrestationForm), min_entries=1)

所以我的问题是:

  • 为什么误差在上升
  • 我怎么能有更明确的错误,告诉我哪些字段引发了这个问题
  • 我该如何解决这个问题

我现在完全锁定了:(

感谢的支持


编辑

因此,我最终确认问题来自FormField(AddressField)

这是我的Demande模型摘录:

AdressePrivee = db.relationship(AdressePrivee, backref='Demande', lazy=False, uselist=False)

并且在DemandeForm:中

AdressePrivee = FormField(AdresseForm)

Wtform不高兴,因为demande.AdressePrivee==None,因此代码中的self._obj is None和错误增加。

我尝试添加默认值:

AdressePrivee = FormField(AdresseForm, default=AdressePrivee())

但我在保存时遇到了一个错误,因为AddressePrivee字段是空的,而它们不应该。。。

难道没有缺少一个选项,比如nullable: True之类的吗?我不确定错误上升是否有意义,也不确定我如何处理这种情况。。。

感谢

以下是WTF函数的相关源代码,这是触发错误的地方:

def populate_obj(self, obj, name):
candidate = getattr(obj, name, None)
if candidate is None:
if self._obj is None:
raise TypeError('populate_obj: cannot find a value to populate from the provided obj or input data/defaults')
candidate = self._obj
setattr(obj, name, candidate)
self.form.populate_obj(candidate)

在程序CCD_ 11中为CCD_。

因此,您传递的变量似乎有问题。事实上,我不明白你为什么要把current_user的等价物传递到你的表单中。

最新更新