Fixed #29209 -- Fixed Cast() with TextField on MySQL and Oracle.
This commit is contained in:
parent
c12745f682
commit
d696fccae6
|
@ -18,6 +18,7 @@ class DatabaseOperations(BaseDatabaseOperations):
|
||||||
}
|
}
|
||||||
cast_data_types = {
|
cast_data_types = {
|
||||||
'CharField': 'char(%(max_length)s)',
|
'CharField': 'char(%(max_length)s)',
|
||||||
|
'TextField': 'char',
|
||||||
'IntegerField': 'signed integer',
|
'IntegerField': 'signed integer',
|
||||||
'BigIntegerField': 'signed integer',
|
'BigIntegerField': 'signed integer',
|
||||||
'SmallIntegerField': 'signed integer',
|
'SmallIntegerField': 'signed integer',
|
||||||
|
|
|
@ -51,6 +51,9 @@ END;
|
||||||
|
|
||||||
# Oracle doesn't support string without precision; use the max string size.
|
# Oracle doesn't support string without precision; use the max string size.
|
||||||
cast_char_field_without_max_length = 'NVARCHAR2(2000)'
|
cast_char_field_without_max_length = 'NVARCHAR2(2000)'
|
||||||
|
cast_data_types = {
|
||||||
|
'TextField': cast_char_field_without_max_length,
|
||||||
|
}
|
||||||
|
|
||||||
def cache_key_culling_sql(self):
|
def cache_key_culling_sql(self):
|
||||||
return """
|
return """
|
||||||
|
|
|
@ -74,3 +74,6 @@ class CastTests(TestCase):
|
||||||
"""
|
"""
|
||||||
list(Author.objects.annotate(cast_float=Cast(Avg('age'), models.FloatField())))
|
list(Author.objects.annotate(cast_float=Cast(Avg('age'), models.FloatField())))
|
||||||
self.assertIn('(AVG("db_functions_author"."age"))::double precision', connection.queries[-1]['sql'])
|
self.assertIn('(AVG("db_functions_author"."age"))::double precision', connection.queries[-1]['sql'])
|
||||||
|
|
||||||
|
def test_cast_to_text_field(self):
|
||||||
|
self.assertEqual(Author.objects.values_list(Cast('age', models.TextField()), flat=True).get(), '1')
|
||||||
|
|
Loading…
Reference in New Issue