WTForms-JSON 与使用 FormField 的可选嵌套

Jim*_*art 5 wtforms wtforms-json

我正在使用WTForms-JSON并处理嵌套表单。我想让内部表单可选,但如果存在内部表单,我希望它的字段是必需的。我遇到的问题是FormField不接受验证器。

(虽然我使用的是 WTForms-JSON,但我相信这也适用于 vanilla WTForms。)

这段代码有效,但不符合我想要的方式:

class InnerForm(Form):
    foo_id = IntegerField("Foo ID", [Required()])

class OuterForm(Form):
    inner = FormField(InnerForm)
Run Code Online (Sandbox Code Playgroud)

上面代码的问题inner是隐式需要。奇怪的是,虽然validate()回报率Falseinner被省略了,errors是空的。

此代码不起作用:

class InnerForm(Form):
    foo_id = IntegerField("Foo ID", [Required()])

class OuterForm(Form):
    inner = FormField(InnerForm, "Inner", [Optional()])
Run Code Online (Sandbox Code Playgroud)

后者产生此错误:

TypeError: FormField does not accept any validators. Instead, define them on the enclosed form.
Run Code Online (Sandbox Code Playgroud)

我的问题是:我怎样才能使inner可选,但foo_id如果inner存在则需要?

Sea*_*ira 3

最简单的方法是将 包裹FormField在 a 中FieldListmax_entries设置为 1。 FieldList也支持验证器,但由于min_entries默认情况下为 0,因此您不需要任何验证器。唯一的烦恼是您必须解开内部表单的数据(如果可用)。