Fixed #28727 -- Fixed Cast crash on SQLite when casting a Python date/datetime to Date/DateTimeField.
This commit is contained in:
parent
78247b80a8
commit
4420761ea9
|
@ -14,6 +14,10 @@ from django.utils.duration import duration_string
|
||||||
|
|
||||||
class DatabaseOperations(BaseDatabaseOperations):
|
class DatabaseOperations(BaseDatabaseOperations):
|
||||||
cast_char_field_without_max_length = 'text'
|
cast_char_field_without_max_length = 'text'
|
||||||
|
cast_data_types = {
|
||||||
|
'DateField': 'TEXT',
|
||||||
|
'DateTimeField': 'TEXT',
|
||||||
|
}
|
||||||
|
|
||||||
def bulk_batch_size(self, fields, objs):
|
def bulk_batch_size(self, fields, objs):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
from django.db import models
|
import datetime
|
||||||
|
|
||||||
|
from django.db import connection, models
|
||||||
from django.db.models.expressions import Value
|
from django.db.models.expressions import Value
|
||||||
from django.db.models.functions import Cast
|
from django.db.models.functions import Cast
|
||||||
from django.test import TestCase, ignore_warnings, skipUnlessDBFeature
|
from django.test import TestCase, ignore_warnings, skipUnlessDBFeature
|
||||||
|
@ -42,6 +44,19 @@ class CastTests(TestCase):
|
||||||
numbers = Author.objects.annotate(cast_int=Cast('alias', field_class()))
|
numbers = Author.objects.annotate(cast_int=Cast('alias', field_class()))
|
||||||
self.assertEqual(numbers.get().cast_int, 1)
|
self.assertEqual(numbers.get().cast_int, 1)
|
||||||
|
|
||||||
|
def test_cast_from_python_to_date(self):
|
||||||
|
today = datetime.date.today()
|
||||||
|
dates = Author.objects.annotate(cast_date=Cast(today, models.DateField()))
|
||||||
|
self.assertEqual(dates.get().cast_date, today)
|
||||||
|
|
||||||
|
def test_cast_from_python_to_datetime(self):
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
if connection.vendor == 'oracle':
|
||||||
|
# Workaround until #28934 is fixed.
|
||||||
|
now = now.replace(microsecond=0)
|
||||||
|
dates = Author.objects.annotate(cast_datetime=Cast(now, models.DateTimeField()))
|
||||||
|
self.assertEqual(dates.get().cast_datetime, now)
|
||||||
|
|
||||||
def test_cast_from_python(self):
|
def test_cast_from_python(self):
|
||||||
numbers = Author.objects.annotate(cast_float=Cast(0, models.FloatField()))
|
numbers = Author.objects.annotate(cast_float=Cast(0, models.FloatField()))
|
||||||
self.assertEqual(numbers.get().cast_float, 0.0)
|
self.assertEqual(numbers.get().cast_float, 0.0)
|
||||||
|
|
Loading…
Reference in New Issue