Commit e9814029 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Fixed #10692 -- Fixed DecimalField lookups for extreme values.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10545 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 8931d8d6
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -620,10 +620,13 @@ class DecimalField(Field):
        from django.db.backends import util
        return util.format_number(value, self.max_digits, self.decimal_places)

    def get_db_prep_value(self, value):
    def get_db_prep_save(self, value):
        return connection.ops.value_to_db_decimal(self.to_python(value),
                self.max_digits, self.decimal_places)

    def get_db_prep_value(self, value):
        return self.to_python(value)

    def formfield(self, **kwargs):
        defaults = {
            'max_digits': self.max_digits,
+21 −9
Original line number Diff line number Diff line
import datetime
import unittest

import django.test
from django import forms
from django.db import models
from django.core.exceptions import ValidationError

from models import Foo, Bar, Whiz, BigD, BigS

try:
    from decimal import Decimal
except ImportError:
@@ -38,7 +41,7 @@ class DecimalFieldTests(django.test.TestCase):
        Foo.objects.create(id=1, a='abc', d=Decimal("12.34"))
        self.assertEqual(list(Foo.objects.filter(d=u'1.23')), [])

    def test_save_wihout_float_conversion(self):
    def test_save_without_float_conversion(self):
        """
        Ensure decimals don't go through a corrupting float conversion during
        save (#5079).
@@ -48,6 +51,14 @@ class DecimalFieldTests(django.test.TestCase):
        bd = BigD.objects.get(pk=bd.pk)
        self.assertEqual(bd.d, Decimal("12.9"))

    def test_lookup_really_big_value(self):
        """
        Ensure that really big values can be used in a filter statement, even
        with older Python versions.
        """
        # This should not crash. That counts as a win for our purposes.
        Foo.objects.filter(d__gte=100000000000)

class ForeignKeyTests(django.test.TestCase):
    def test_callable_default(self):
        """Test the use of a lazy callable for ForeignKey.default"""
@@ -120,3 +131,4 @@ class SlugFieldTests(django.test.TestCase):
        bs = BigS.objects.create(s = 'slug'*50)
        bs = BigS.objects.get(pk=bs.pk)
        self.assertEqual(bs.s, 'slug'*50)