Fixed #29845 -- Fixed Cast crash on MySQL when casting to DecimalField.

This commit is contained in:
Mariusz Felisiak 2018-10-15 15:57:22 +02:00 committed by GitHub
parent f07091a30f
commit f2e2a1bd4b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View file

@ -10,7 +10,7 @@ from django.test import (
TestCase, ignore_warnings, override_settings, skipUnlessDBFeature,
)
from ..models import Author, DTModel, Fan
from ..models import Author, DTModel, Fan, FloatModel
class CastTests(TestCase):
@ -37,6 +37,20 @@ class CastTests(TestCase):
names = Author.objects.annotate(cast_string=Cast('name', models.CharField(max_length=1)))
self.assertEqual(names.get().cast_string, 'B')
@skipUnlessDBFeature('supports_cast_with_precision')
def test_cast_to_decimal_field(self):
FloatModel.objects.create(f1=-1.934, f2=3.467)
float_obj = FloatModel.objects.annotate(
cast_f1_decimal=Cast('f1', models.DecimalField(max_digits=8, decimal_places=2)),
cast_f2_decimal=Cast('f2', models.DecimalField(max_digits=8, decimal_places=1)),
).get()
self.assertEqual(float_obj.cast_f1_decimal, decimal.Decimal('-1.93'))
self.assertEqual(float_obj.cast_f2_decimal, decimal.Decimal('3.5'))
author_obj = Author.objects.annotate(
cast_alias_decimal=Cast('alias', models.DecimalField(max_digits=8, decimal_places=2)),
).get()
self.assertEqual(author_obj.cast_alias_decimal, decimal.Decimal('1'))
def test_cast_to_integer(self):
for field_class in (
models.AutoField,