Create a custom field in wtForms

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

Custom form field:

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 = [] 

Valid form calls custom form field

 class PostForm(Form): status = CustomField() 

Whenever I send data to PostForm , it calls a custom field, but does not pass any valuelist to process_formatdata . A custom field always returns an empty list.
I missed something here.

+6
source share
1 answer

Your code works for me, here is a working example -

example.py

 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> 
+7
source

Source: https://habr.com/ru/post/946035/


All Articles