Skip to content

Instantly share code, notes, and snippets.

@immunda
Created February 7, 2012 12:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save immunda/1759380 to your computer and use it in GitHub Desktop.
Save immunda/1759380 to your computer and use it in GitHub Desktop.
Example SplitDateField
"""
Release edit date field
"""
class SplitDateWidget(forms.MultiWidget):
def __init__(self, attrs=None):
widgets = (
forms.TextInput(attrs={'placeholder': "DD", 'size': "2", 'maxlength': "2"}),
forms.TextInput(attrs={'placeholder': "MM", 'size': "2", 'maxlength': "2"}),
forms.TextInput(attrs={'placeholder': "YYYY", 'size': "4", 'class': "year", 'maxlength': "4"}),
)
super(SplitDateWidget, self).__init__(widgets, attrs=attrs)
def decompress(self, val):
try:
return [val.day, val.month, val.year]
except AttributeError:
pass
return [None, None, None]
def format_output(self, rendered_widgets):
return mark_safe('%s %s %s' % (rendered_widgets[0], rendered_widgets[1], rendered_widgets[2]))
class SplitDateField(forms.MultiValueField):
def __init__(self, required=True, widget=None, label=None, initial=None, help_text=None, choices=None):
widget = SplitDateWidget
fields = (
forms.IntegerField(),
forms.IntegerField(),
forms.IntegerField(),
)
super(SplitDateField, self).__init__(fields, widget=widget, required=required)
def compress(self, vals):
if len(vals) > 0:
try:
date = datetime.date(vals[2], vals[1], vals[0])
return date
except (ValueError, TypeError):
raise forms.ValidationError("You must enter a valid date")
return None
def clean(self, value, initial=None):
value = super(SplitDateField, self).clean(value)
return value
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment