28 lines
856 B
Python
28 lines
856 B
Python
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 render(self, name, value, attrs=None):
|
|
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).render(name, value, attrs)
|
|
|
|
|
|
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."))
|