在wtForms中创建一个自定义字段 [英] Create a custom field in wtForms
本文介绍了在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屋!
查看全文