Commit 08cb31b2 authored by Serge S. Koval's avatar Serge S. Koval

Coerce support for Select2TagsField

parent 7cfccfc0
...@@ -3,7 +3,7 @@ import datetime ...@@ -3,7 +3,7 @@ import datetime
from wtforms import fields, widgets from wtforms import fields, widgets
from flask.ext.admin.babel import gettext from flask.ext.admin.babel import gettext
from flask.ext.admin._compat import text_type from flask.ext.admin._compat import text_type, as_unicode
from . import widgets as admin_widgets from . import widgets as admin_widgets
...@@ -105,6 +105,7 @@ class Select2Field(fields.SelectField): ...@@ -105,6 +105,7 @@ class Select2Field(fields.SelectField):
def pre_validate(self, form): def pre_validate(self, form):
if self.allow_blank and self.data is None: if self.allow_blank and self.data is None:
return return
super(Select2Field, self).pre_validate(form) super(Select2Field, self).pre_validate(form)
...@@ -114,20 +115,25 @@ class Select2TagsField(fields.TextField): ...@@ -114,20 +115,25 @@ class Select2TagsField(fields.TextField):
""" """
widget = admin_widgets.Select2TagsWidget() widget = admin_widgets.Select2TagsWidget()
def __init__(self, label=None, validators=None, save_as_list=False, **kwargs): def __init__(self, label=None, validators=None, save_as_list=False, coerce=text_type, **kwargs):
"""Initialization """Initialization
:param save_as_list: :param save_as_list:
If `True` then populate ``obj`` using list else string If `True` then populate ``obj`` using list else string
""" """
self.save_as_list = save_as_list self.save_as_list = save_as_list
self.coerce = coerce
super(Select2TagsField, self).__init__(label, validators, **kwargs) super(Select2TagsField, self).__init__(label, validators, **kwargs)
def process_formdata(self, valuelist): def process_formdata(self, valuelist):
if self.save_as_list: if self.save_as_list:
self.data = [v.strip() for v in valuelist[0].split(',') if v.strip()] self.data = [self.coerce(v.strip()) for v in valuelist[0].split(',') if v.strip()]
else: else:
self.data = valuelist[0] self.data = self.coerce(valuelist[0])
def _value(self): def _value(self):
return u', '.join(self.data) if isinstance(self.data, list) else self.data if isinstance(self.data, (list, tuple)):
return u','.join(as_unicode(v) for v in self.data)
else:
return as_unicode(self.data)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment