Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

fields.py 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from django.db.models import TextField
  2. from django.utils import six
  3. from django.utils.translation import ugettext_lazy as _
  4. from .validators import validate_comma_separated_emails
  5. class CommaSeparatedEmailField(TextField):
  6. default_validators = [validate_comma_separated_emails]
  7. description = _("Comma-separated emails")
  8. def __init__(self, *args, **kwargs):
  9. kwargs['blank'] = True
  10. super(CommaSeparatedEmailField, self).__init__(*args, **kwargs)
  11. def formfield(self, **kwargs):
  12. defaults = {
  13. 'error_messages': {
  14. 'invalid': _('Only comma separated emails are allowed.'),
  15. }
  16. }
  17. defaults.update(kwargs)
  18. return super(CommaSeparatedEmailField, self).formfield(**defaults)
  19. def from_db_value(self, value, expression, connection, context):
  20. return self.to_python(value)
  21. def get_prep_value(self, value):
  22. """
  23. We need to accomodate queries where a single email,
  24. or list of email addresses is supplied as arguments. For example:
  25. - Email.objects.filter(to='mail@example.com')
  26. - Email.objects.filter(to=['one@example.com', 'two@example.com'])
  27. """
  28. if isinstance(value, six.string_types):
  29. return value
  30. else:
  31. return ', '.join(map(lambda s: s.strip(), value))
  32. def to_python(self, value):
  33. if isinstance(value, six.string_types):
  34. if value == '':
  35. return []
  36. else:
  37. return [s.strip() for s in value.split(',')]
  38. else:
  39. return value
  40. def south_field_triple(self):
  41. """
  42. Return a suitable description of this field for South.
  43. Taken from smiley chris' easy_thumbnails
  44. """
  45. from south.modelsinspector import introspector
  46. field_class = 'django.db.models.fields.TextField'
  47. args, kwargs = introspector(self)
  48. return (field_class, args, kwargs)