|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- from django.db.models import TextField
- from django.utils import six
- from django.utils.translation import ugettext_lazy as _
-
- from .validators import validate_comma_separated_emails
-
-
- class CommaSeparatedEmailField(TextField):
- default_validators = [validate_comma_separated_emails]
- description = _("Comma-separated emails")
-
- def __init__(self, *args, **kwargs):
- kwargs['blank'] = True
- super(CommaSeparatedEmailField, self).__init__(*args, **kwargs)
-
- def formfield(self, **kwargs):
- defaults = {
- 'error_messages': {
- 'invalid': _('Only comma separated emails are allowed.'),
- }
- }
- defaults.update(kwargs)
- return super(CommaSeparatedEmailField, self).formfield(**defaults)
-
- def from_db_value(self, value, expression, connection, context):
- return self.to_python(value)
-
- def get_prep_value(self, value):
- """
- We need to accomodate queries where a single email,
- or list of email addresses is supplied as arguments. For example:
-
- - Email.objects.filter(to='mail@example.com')
- - Email.objects.filter(to=['one@example.com', 'two@example.com'])
- """
- if isinstance(value, six.string_types):
- return value
- else:
- return ', '.join(map(lambda s: s.strip(), value))
-
- def to_python(self, value):
- if isinstance(value, six.string_types):
- if value == '':
- return []
- else:
- return [s.strip() for s in value.split(',')]
- else:
- return value
-
- def south_field_triple(self):
- """
- Return a suitable description of this field for South.
- Taken from smiley chris' easy_thumbnails
- """
- from south.modelsinspector import introspector
- field_class = 'django.db.models.fields.TextField'
- args, kwargs = introspector(self)
- return (field_class, args, kwargs)
|