--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/tagging/forms.py Fri Jan 22 18:23:34 2010 +0100
@@ -0,0 +1,40 @@
+"""
+Tagging components for Django's form library.
+"""
+from django import forms
+from django.utils.translation import ugettext as _
+
+from tagging import settings
+from tagging.models import Tag
+from tagging.utils import parse_tag_input
+
+class TagAdminForm(forms.ModelForm):
+ class Meta:
+ model = Tag
+
+ def clean_name(self):
+ value = self.cleaned_data['name']
+ tag_names = parse_tag_input(value)
+ if len(tag_names) > 1:
+ raise forms.ValidationError(_('Multiple tags were given.'))
+ elif len(tag_names[0]) > settings.MAX_TAG_LENGTH:
+ raise forms.ValidationError(
+ _('A tag may be no more than %s characters long.') %
+ settings.MAX_TAG_LENGTH)
+ return value
+
+class TagField(forms.CharField):
+ """
+ A ``CharField`` which validates that its input is a valid list of
+ tag names.
+ """
+ def clean(self, value):
+ value = super(TagField, self).clean(value)
+ if value == u'':
+ return value
+ for tag_name in parse_tag_input(value):
+ if len(tag_name) > settings.MAX_TAG_LENGTH:
+ raise forms.ValidationError(
+ _('Each tag may be no more than %s characters long.') %
+ settings.MAX_TAG_LENGTH)
+ return value