diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2009-04-28 13:19:30 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2009-04-28 13:19:30 +0000 |
| commit | 6312de027911104825adbb0c553b4c5bfeb96b39 (patch) | |
| tree | 0882dd007ac21ce749d3e3c01b2125df0ece2467 /django/forms/widgets.py | |
| parent | f7f755e982bc8e1e4bf1a7777d9a5fbf390c37e0 (diff) | |
Fixed #10288 -- Corrected _has_changed handling of DateTimeInput, DateInput, TimeInput, and SplitDateTimeWidget when a custom date/time format is in use. Thanks to Koen Biermans for the report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10641 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/forms/widgets.py')
| -rw-r--r-- | django/forms/widgets.py | 49 |
1 files changed, 35 insertions, 14 deletions
diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 6768984eca..cecafa880b 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -294,14 +294,21 @@ class DateInput(Input): if format: self.format = format - def render(self, name, value, attrs=None): + def _format_value(self, value): if value is None: - value = '' + return '' elif hasattr(value, 'strftime'): value = datetime_safe.new_date(value) - value = value.strftime(self.format) + return value.strftime(self.format) + return value + + def render(self, name, value, attrs=None): + value = self._format_value(value) return super(DateInput, self).render(name, value, attrs) + def _has_changed(self, initial, data): + return super(DateInput, self)._has_changed(self._format_value(initial), data) + class DateTimeInput(Input): input_type = 'text' format = '%Y-%m-%d %H:%M:%S' # '2006-10-25 14:30:59' @@ -311,14 +318,21 @@ class DateTimeInput(Input): if format: self.format = format - def render(self, name, value, attrs=None): + def _format_value(self, value): if value is None: - value = '' + return '' elif hasattr(value, 'strftime'): value = datetime_safe.new_datetime(value) - value = value.strftime(self.format) + return value.strftime(self.format) + return value + + def render(self, name, value, attrs=None): + value = self._format_value(value) return super(DateTimeInput, self).render(name, value, attrs) + def _has_changed(self, initial, data): + return super(DateTimeInput, self)._has_changed(self._format_value(initial), data) + class TimeInput(Input): input_type = 'text' format = '%H:%M:%S' # '14:30:59' @@ -328,13 +342,20 @@ class TimeInput(Input): if format: self.format = format - def render(self, name, value, attrs=None): + def _format_value(self, value): if value is None: - value = '' + return '' elif hasattr(value, 'strftime'): - value = value.strftime(self.format) + return value.strftime(self.format) + return value + + def render(self, name, value, attrs=None): + value = self._format_value(value) return super(TimeInput, self).render(name, value, attrs) + def _has_changed(self, initial, data): + return super(TimeInput, self)._has_changed(self._format_value(initial), data) + class CheckboxInput(Widget): def __init__(self, attrs=None, check_test=bool): super(CheckboxInput, self).__init__(attrs) @@ -422,11 +443,11 @@ class NullBooleanSelect(Select): def value_from_datadict(self, data, files, name): value = data.get(name, None) - return {u'2': True, - True: True, - 'True': True, - u'3': False, - 'False': False, + return {u'2': True, + True: True, + 'True': True, + u'3': False, + 'False': False, False: False}.get(value, None) def _has_changed(self, initial, data): |
