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
This commit is contained in:
parent
f7f755e982
commit
6312de0279
|
@ -294,14 +294,21 @@ class DateInput(Input):
|
||||||
if format:
|
if format:
|
||||||
self.format = format
|
self.format = format
|
||||||
|
|
||||||
def render(self, name, value, attrs=None):
|
def _format_value(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
value = ''
|
return ''
|
||||||
elif hasattr(value, 'strftime'):
|
elif hasattr(value, 'strftime'):
|
||||||
value = datetime_safe.new_date(value)
|
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)
|
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):
|
class DateTimeInput(Input):
|
||||||
input_type = 'text'
|
input_type = 'text'
|
||||||
format = '%Y-%m-%d %H:%M:%S' # '2006-10-25 14:30:59'
|
format = '%Y-%m-%d %H:%M:%S' # '2006-10-25 14:30:59'
|
||||||
|
@ -311,14 +318,21 @@ class DateTimeInput(Input):
|
||||||
if format:
|
if format:
|
||||||
self.format = format
|
self.format = format
|
||||||
|
|
||||||
def render(self, name, value, attrs=None):
|
def _format_value(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
value = ''
|
return ''
|
||||||
elif hasattr(value, 'strftime'):
|
elif hasattr(value, 'strftime'):
|
||||||
value = datetime_safe.new_datetime(value)
|
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)
|
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):
|
class TimeInput(Input):
|
||||||
input_type = 'text'
|
input_type = 'text'
|
||||||
format = '%H:%M:%S' # '14:30:59'
|
format = '%H:%M:%S' # '14:30:59'
|
||||||
|
@ -328,13 +342,20 @@ class TimeInput(Input):
|
||||||
if format:
|
if format:
|
||||||
self.format = format
|
self.format = format
|
||||||
|
|
||||||
def render(self, name, value, attrs=None):
|
def _format_value(self, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
value = ''
|
return ''
|
||||||
elif hasattr(value, 'strftime'):
|
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)
|
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):
|
class CheckboxInput(Widget):
|
||||||
def __init__(self, attrs=None, check_test=bool):
|
def __init__(self, attrs=None, check_test=bool):
|
||||||
super(CheckboxInput, self).__init__(attrs)
|
super(CheckboxInput, self).__init__(attrs)
|
||||||
|
|
|
@ -1076,9 +1076,11 @@ Use 'date_format' and 'time_format' to change the way a value is displayed.
|
||||||
>>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30))
|
>>> w.render('date', datetime.datetime(2006, 1, 10, 7, 30))
|
||||||
u'<input type="text" name="date_0" value="10/01/2006" /><input type="text" name="date_1" value="07:30" />'
|
u'<input type="text" name="date_0" value="10/01/2006" /><input type="text" name="date_1" value="07:30" />'
|
||||||
|
|
||||||
>>> w._has_changed(datetime.datetime(2008, 5, 5, 12, 40, 00), [u'2008-05-05', u'12:40:00'])
|
>>> w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'2008-05-06', u'12:40:00'])
|
||||||
|
True
|
||||||
|
>>> w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:40'])
|
||||||
False
|
False
|
||||||
>>> w._has_changed(datetime.datetime(2008, 5, 5, 12, 40, 00), [u'2008-05-05', u'12:41:00'])
|
>>> w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:41'])
|
||||||
True
|
True
|
||||||
|
|
||||||
# DateTimeInput ###############################################################
|
# DateTimeInput ###############################################################
|
||||||
|
@ -1102,6 +1104,8 @@ Use 'format' to change the way a value is displayed.
|
||||||
>>> w = DateTimeInput(format='%d/%m/%Y %H:%M')
|
>>> w = DateTimeInput(format='%d/%m/%Y %H:%M')
|
||||||
>>> w.render('date', d)
|
>>> w.render('date', d)
|
||||||
u'<input type="text" name="date" value="17/09/2007 12:51" />'
|
u'<input type="text" name="date" value="17/09/2007 12:51" />'
|
||||||
|
>>> w._has_changed(d, '17/09/2007 12:51')
|
||||||
|
False
|
||||||
|
|
||||||
# DateInput ###################################################################
|
# DateInput ###################################################################
|
||||||
|
|
||||||
|
@ -1125,6 +1129,8 @@ Use 'format' to change the way a value is displayed.
|
||||||
>>> w = DateInput(format='%d/%m/%Y')
|
>>> w = DateInput(format='%d/%m/%Y')
|
||||||
>>> w.render('date', d)
|
>>> w.render('date', d)
|
||||||
u'<input type="text" name="date" value="17/09/2007" />'
|
u'<input type="text" name="date" value="17/09/2007" />'
|
||||||
|
>>> w._has_changed(d, '17/09/2007')
|
||||||
|
False
|
||||||
|
|
||||||
# TimeInput ###################################################################
|
# TimeInput ###################################################################
|
||||||
|
|
||||||
|
@ -1151,6 +1157,8 @@ Use 'format' to change the way a value is displayed.
|
||||||
>>> w = TimeInput(format='%H:%M')
|
>>> w = TimeInput(format='%H:%M')
|
||||||
>>> w.render('time', t)
|
>>> w.render('time', t)
|
||||||
u'<input type="text" name="time" value="12:51" />'
|
u'<input type="text" name="time" value="12:51" />'
|
||||||
|
>>> w._has_changed(t, '12:51')
|
||||||
|
False
|
||||||
|
|
||||||
# SplitHiddenDateTimeWidget ###################################################
|
# SplitHiddenDateTimeWidget ###################################################
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue