35 lines
997 B
Python
35 lines
997 B
Python
# Django Snippet from http://www.djangosnippets.org/snippets/1521/
|
|
|
|
import re
|
|
from django.forms import fields
|
|
from django.forms import ValidationError
|
|
from django.utils.encoding import smart_unicode
|
|
|
|
class HexColorField(fields.Field):
|
|
|
|
default_error_messages = {
|
|
'hex_error': u'This is an invalid color code. It must be a html hex color code e.g. #000000'
|
|
}
|
|
|
|
def clean(self, value):
|
|
|
|
super(HexColorField, self).clean(value)
|
|
|
|
if value in fields.EMPTY_VALUES:
|
|
return u''
|
|
|
|
value = smart_unicode(value)
|
|
value_length = len(value)
|
|
|
|
if value_length != 7 or not re.match('^\#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$', value):
|
|
raise ValidationError(self.error_messages['hex_error'])
|
|
|
|
return value
|
|
|
|
def widget_attrs(self, widget):
|
|
if isinstance(widget, (fields.TextInput)):
|
|
return {'maxlength': str(7)}
|
|
|
|
def __unicode__(self):
|
|
return self.value
|