Commit 1e0c34dd authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

[1.0.X] Fixed #10692 -- Fixed DecimalField lookups for extreme values.

Backport of r10545 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10546 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent f0c9bc55
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -611,10 +611,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)