54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from django import forms
|
|
from django.core.validators import validate_email
|
|
|
|
class MultiEmailField(forms.Field):
|
|
def to_python(self, value):
|
|
"Normalize data to a list of strings."
|
|
|
|
# Return an empty list if no input was given.
|
|
if not value:
|
|
return []
|
|
|
|
if isinstance(value, basestring):
|
|
values = value.split(',')
|
|
return [ x.strip() for x in values if x.strip() ]
|
|
else:
|
|
return value
|
|
|
|
def validate(self, value):
|
|
"Check if value consists only of valid emails."
|
|
|
|
# Use the parent's handling of required fields, etc.
|
|
super(MultiEmailField, self).validate(value)
|
|
|
|
for email in value:
|
|
validate_email(email)
|
|
|
|
def yyyymmdd_to_strftime_format(fmt):
|
|
return (fmt
|
|
.replace("yyyy", "%Y")
|
|
.replace("yy", "%y")
|
|
.replace("mm", "%m")
|
|
.replace("m", "%-m")
|
|
.replace("MM", "%B")
|
|
.replace("M", "%b")
|
|
.replace("dd", "%d")
|
|
.replace("d", "%-d")
|
|
.replace("MM", "%A")
|
|
.replace("M", "%a")
|
|
)
|
|
|
|
class DatepickerDateField(forms.DateField):
|
|
"""DateField with some glue for triggering JS Bootstrap datepicker."""
|
|
|
|
def __init__(self, date_format, picker_settings={}, *args, **kwargs):
|
|
strftime_format = yyyymmdd_to_strftime_format(date_format)
|
|
kwargs["input_formats"] = [strftime_format]
|
|
kwargs["widget"] = forms.DateInput(format=strftime_format)
|
|
super(DatepickerDateField, self).__init__(*args, **kwargs)
|
|
|
|
self.widget.attrs["data-provide"] = "datepicker"
|
|
self.widget.attrs["data-date-format"] = date_format
|
|
for k, v in picker_settings.iteritems():
|
|
self.widget.attrs["data-date-%s" % k] = v
|