fields.py 954 B

1234567891011121314151617181920212223242526272829303132333435
  1. from django.core.validators import RegexValidator
  2. from django.db import models
  3. from .forms import ColorSelect
  4. ColorValidator = RegexValidator(
  5. regex='^[0-9a-f]{6}$',
  6. message='Enter a valid hexadecimal RGB color code.',
  7. code='invalid'
  8. )
  9. class NullableCharField(models.CharField):
  10. description = "Stores empty values as NULL rather than ''"
  11. def to_python(self, value):
  12. if isinstance(value, models.CharField):
  13. return value
  14. return value or ''
  15. def get_prep_value(self, value):
  16. return value or None
  17. class ColorField(models.CharField):
  18. default_validators = [ColorValidator]
  19. description = "A hexadecimal RGB color code"
  20. def __init__(self, *args, **kwargs):
  21. kwargs['max_length'] = 6
  22. super(ColorField, self).__init__(*args, **kwargs)
  23. def formfield(self, **kwargs):
  24. kwargs['widget'] = ColorSelect
  25. return super(ColorField, self).formfield(**kwargs)