from __future__ import unicode_literals from django import forms from django.utils import six from django.utils.translation import ugettext as _ from taggit.utils import edit_string_for_tags, parse_tags class TagWidget(forms.TextInput): def format_value(self, value): if value is not None and not isinstance(value, six.string_types): value = edit_string_for_tags([ o.tag for o in value.select_related("tag")]) return super(TagWidget, self).format_value(value) class TagField(forms.CharField): widget = TagWidget def clean(self, value): value = super(TagField, self).clean(value) try: return parse_tags(value) except ValueError: raise forms.ValidationError( _("Please provide a comma-separated list of tags."))