标签: wtforms-json

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

我正在使用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存在则需要?

wtforms wtforms-json

5
推荐指数
1
解决办法
2152
查看次数

WTForms-JSON 不适用于 FormFields

当我使用 WTForms-JSON 时,嵌套表单 (FormFields) 不会填充数据。我无法发现我的错误,请参见下面的示例。

from flask import Flask, request, jsonify
from flask_wtf import Form
from wtforms import TextField, FormField, IntegerField
from wtforms.validators import InputRequired
import wtforms_json

app = Flask(__name__)
app.config["WTF_CSRF_ENABLED"] = False
wtforms_json.init()


class Address(Form):
    street = TextField('street', validators=[InputRequired()])
    number = IntegerField('number', validators=[InputRequired()])


class User(Form):
    name = TextField('name', validators=[InputRequired()])
    address = FormField(Address, label='address')


@app.route('/', methods=['POST'])
def why_no_work():
    form = User()

    form.from_json(request.json)
    print form.data

    if form.validate():
        return jsonify(success='YEAH')
    else:
        return jsonify(errors=form.errors)


if __name__ == '__main__':
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

我发送以下 JSON 请求

{ …
Run Code Online (Sandbox Code Playgroud)

python flask python-2.7 wtforms wtforms-json

5
推荐指数
1
解决办法
3086
查看次数

标签 统计

wtforms ×2

wtforms-json ×2

flask ×1

python ×1

python-2.7 ×1