Fixed #26324 -- Fixed DurationField with fractional seconds on SQLite.
This commit is contained in:
parent
85a4844f8a
commit
4f0cd0fd16
|
@ -1682,7 +1682,8 @@ class DurationField(Field):
|
|||
return value
|
||||
if value is None:
|
||||
return None
|
||||
return value.total_seconds() * 1000000
|
||||
# Discard any fractional microseconds due to floating point arithmetic.
|
||||
return int(round(value.total_seconds() * 1000000))
|
||||
|
||||
def get_db_converters(self, connection):
|
||||
converters = []
|
||||
|
|
|
@ -12,3 +12,6 @@ Bugfixes
|
|||
* Made ``MultiPartParser`` ignore filenames that normalize to an empty string
|
||||
to fix crash in ``MemoryFileUploadHandler`` on specially crafted user input
|
||||
(:ticket:`26325`).
|
||||
|
||||
* Fixed data loss on SQLite where ``DurationField`` values with fractional
|
||||
seconds could be saved as ``None`` (:ticket:`26324`).
|
||||
|
|
|
@ -16,3 +16,6 @@ Bugfixes
|
|||
* Fixed a race condition in ``BaseCache.get_or_set()`` (:ticket:`26332`). It
|
||||
now returns the ``default`` value instead of ``False`` if there's an error
|
||||
when trying to add the value to the cache.
|
||||
|
||||
* Fixed data loss on SQLite where ``DurationField`` values with fractional
|
||||
seconds could be saved as ``None`` (:ticket:`26324`).
|
||||
|
|
|
@ -22,6 +22,12 @@ class TestSaveLoad(TestCase):
|
|||
loaded = NullDurationModel.objects.get()
|
||||
self.assertEqual(loaded.field, None)
|
||||
|
||||
def test_fractional_seconds(self):
|
||||
value = datetime.timedelta(seconds=2.05)
|
||||
d = DurationModel.objects.create(field=value)
|
||||
d.refresh_from_db()
|
||||
self.assertEqual(d.field, value)
|
||||
|
||||
|
||||
class TestQuerying(TestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue