Commit 46d8ae7c authored by Karen Tracey's avatar Karen Tracey
Browse files

[1.1.X] Fixed #10015 -- PostgreSQL 8.3+ no longer barfs when passing an...

[1.1.X] Fixed #10015 -- PostgreSQL 8.3+ no longer barfs when passing an integer as a filter() value for a CharField? or TextField?. Thanks, carljm 

Backport of r12150 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12263 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent a8e659c5
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -435,6 +435,9 @@ class CharField(Field):
                    ugettext_lazy("This field cannot be null."))
        return smart_unicode(value)

    def get_db_prep_value(self, value):
        return self.to_python(value)
    
    def formfield(self, **kwargs):
        defaults = {'max_length': self.max_length}
        defaults.update(kwargs)
@@ -833,6 +836,11 @@ class TextField(Field):
    def get_internal_type(self):
        return "TextField"

    def get_db_prep_value(self, value):
        if isinstance(value, basestring) or value is None:
            return value
        return smart_unicode(value)

    def formfield(self, **kwargs):
        defaults = {'widget': forms.Textarea}
        defaults.update(kwargs)
+4 −0
Original line number Diff line number Diff line
@@ -52,6 +52,10 @@ class BigS(models.Model):
    s = models.SlugField(max_length=255)


class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    
###############################################################################
# ImageField

+15 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ from django import forms
from django.db import models
from django.core.exceptions import ValidationError

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

try:
    from decimal import Decimal
@@ -144,3 +144,17 @@ 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)

class TypeCoercionTests(django.test.TestCase):
    """
    Test that database lookups can accept the wrong types and convert
    them with no error: especially on Postgres 8.3+ which does not do
    automatic casting at the DB level. See #10015.

    """
    def test_lookup_integer_in_charfield(self):
        self.assertEquals(Post.objects.filter(title=9).count(), 0)
        
    def test_lookup_integer_in_textfield(self):
        self.assertEquals(Post.objects.filter(body=24).count(), 0)