在wtForms中创建一个自定义字段 [英] Create a custom field in wtForms

查看:267
本文介绍了在wtForms中创建一个自定义字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的表单中,我试图创建带有选择项的自定义数组字段.

In my form I am trying to create a custom array field with choices.

自定义表单字段:

class CustomField(Field):
    widget = TextInput()
    def _value(self):
        if self.data:
            return u', '.join(self.data)
        else:
            return u''

    def process_formdata(self, valuelist):
        if valuelist:
            self.data = [x.strip() for x in valuelist[0].split(',')]
        else:
            self.data = []

实际表单调用自定义表单字段

The actual form calls the custom form field

class PostForm(Form):

    status = CustomField()

无论何时,我将数据发布到PostForm时,它都会调用自定义字段,但不会将任何valuelist传递给process_formatdata.自定义字段始终返回一个空列表.
我在这里想念任何东西吗?

Whenever, I post data to PostForm it calls the custom field but does not pass in an any valuelist to process_formatdata. The custom field always returns a empty list.
Am I missing any thing here.

推荐答案

您的代码对我有用,这是一个有效的示例-

Your code works for me, here's a working example--

from flask import Flask, render_template
from flask.ext.wtf import Form, SubmitField, Field, TextInput

app = Flask(__name__)
app.config['SECRET_KEY'] = 'Shh!'


class CustomField(Field):
    widget = TextInput()
    
    def _value(self):
        if self.data:
            return u', '.join(self.data)
        else:
            return u''

    def process_formdata(self, valuelist):
        if valuelist:
            self.data = [x.strip() for x in valuelist[0].split(',')]
        else:
            self.data = []


class ExampleForm(Form):
    status = CustomField()
    submit = SubmitField('POST')


@app.route('/', methods=['post', 'get'])
def hello_world():
    form = ExampleForm()
    if form.validate_on_submit():
        for entry in form.status.data:
            print '{}'.format(entry)
    return render_template('test.html', form=form)


if __name__ == '__main__':
    app.run(debug=True)

templates/test.html

<form action="." method="post">
    {{ form.hidden_tag() }}
    {{ form.status }}
    {{ form.submit }}
</form>

这篇关于在wtForms中创建一个自定义字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆