From 00a73c1c699e3df2790caf56635647bd72e3cd21 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 8 Oct 2013 21:16:58 +0200 Subject: Fixed #21173 -- Stopped fixing format for date-based widgets at init time Thanks Marc Tamlyn for the review. --- django/forms/widgets.py | 57 +++++++++++-------------------------------------- 1 file changed, 12 insertions(+), 45 deletions(-) (limited to 'django/forms/widgets.py') diff --git a/django/forms/widgets.py b/django/forms/widgets.py index f8246d60bf..67befcfbe0 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -397,60 +397,27 @@ class Textarea(Widget): force_text(value)) -class DateInput(TextInput): +class DateTimeBaseInput(TextInput): + format_key = '' def __init__(self, attrs=None, format=None): - super(DateInput, self).__init__(attrs) - if format: - self.format = format - self.manual_format = True - else: - self.format = formats.get_format('DATE_INPUT_FORMATS')[0] - self.manual_format = False + super(DateTimeBaseInput, self).__init__(attrs) + self.format = format if format else None def _format_value(self, value): - if self.is_localized and not self.manual_format: - return formats.localize_input(value) - elif hasattr(value, 'strftime'): - value = datetime_safe.new_date(value) - return value.strftime(self.format) - return value + return formats.localize_input(value, + self.format or formats.get_format(self.format_key)[0]) -class DateTimeInput(TextInput): - def __init__(self, attrs=None, format=None): - super(DateTimeInput, self).__init__(attrs) - if format: - self.format = format - self.manual_format = True - else: - self.format = formats.get_format('DATETIME_INPUT_FORMATS')[0] - self.manual_format = False +class DateInput(DateTimeBaseInput): + format_key = 'DATE_INPUT_FORMATS' - def _format_value(self, value): - if self.is_localized and not self.manual_format: - return formats.localize_input(value) - elif hasattr(value, 'strftime'): - value = datetime_safe.new_datetime(value) - return value.strftime(self.format) - return value +class DateTimeInput(DateTimeBaseInput): + format_key = 'DATETIME_INPUT_FORMATS' -class TimeInput(TextInput): - def __init__(self, attrs=None, format=None): - super(TimeInput, self).__init__(attrs) - if format: - self.format = format - self.manual_format = True - else: - self.format = formats.get_format('TIME_INPUT_FORMATS')[0] - self.manual_format = False - def _format_value(self, value): - if self.is_localized and not self.manual_format: - return formats.localize_input(value) - elif hasattr(value, 'strftime'): - return value.strftime(self.format) - return value +class TimeInput(DateTimeBaseInput): + format_key = 'TIME_INPUT_FORMATS' # Defined at module level so that CheckboxInput is picklable (#17976) -- cgit v1.3