Author: kmtracey
Date: 2010-01-19 10:55:22 -0600 (Tue, 19 Jan 2010)
New Revision: 12263

Modified:
   django/branches/releases/1.1.X/
   django/branches/releases/1.1.X/django/db/models/fields/__init__.py
   django/branches/releases/1.1.X/tests/regressiontests/model_fields/models.py
   django/branches/releases/1.1.X/tests/regressiontests/model_fields/tests.py
Log:
[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.



Property changes on: django/branches/releases/1.1.X
___________________________________________________________________
Name: svnmerge-integrated
   - 
/django/trunk:1-11500,11523,11527-11528,11531-11552,11554,11577,11579-11581,11588-11589,11591-11592,11596-11599,11601-11617,11619-11626,11628-11635,11637-11638,11643-11644,11648-11653,11656,11670,11678,11681,11684,11686,11688,11691,11693,11695,11697,11699,11701,11703,11705,11707,11714,11719,11732,11734,11740,11748,11751,11753,11756,11760,11800,11802,11808,11815,11817,11820,11822,11824,11826,11828,11831,11833,11835,11837,11839,11841,11844,11857,11864,11874,11876,11878,11885,11898,11901,11905,11909,11912,11914,11917,11938,11953,11961,11977,11979,11984,11986,11988,11990,11992,11994,11996,11998,12001,12004,12006,12011,12022,12024,12044-12045,12048,12054-12056,12059,12064,12066,12068,12070,12079,12086,12088,12104,12118,12132,12137-12138,12140-12141,12144,12151-12152,12220-12221,12229,12249,12253
   + 
/django/trunk:1-11500,11523,11527-11528,11531-11552,11554,11577,11579-11581,11588-11589,11591-11592,11596-11599,11601-11617,11619-11626,11628-11635,11637-11638,11643-11644,11648-11653,11656,11670,11678,11681,11684,11686,11688,11691,11693,11695,11697,11699,11701,11703,11705,11707,11714,11719,11732,11734,11740,11748,11751,11753,11756,11760,11800,11802,11808,11815,11817,11820,11822,11824,11826,11828,11831,11833,11835,11837,11839,11841,11844,11857,11864,11874,11876,11878,11885,11898,11901,11905,11909,11912,11914,11917,11938,11953,11961,11977,11979,11984,11986,11988,11990,11992,11994,11996,11998,12001,12004,12006,12011,12022,12024,12044-12045,12048,12054-12056,12059,12064,12066,12068,12070,12079,12086,12088,12104,12118,12132,12137-12138,12140-12141,12144,12150-12152,12220-12221,12229,12249,12253

Modified: django/branches/releases/1.1.X/django/db/models/fields/__init__.py
===================================================================
--- django/branches/releases/1.1.X/django/db/models/fields/__init__.py  
2010-01-19 01:25:30 UTC (rev 12262)
+++ django/branches/releases/1.1.X/django/db/models/fields/__init__.py  
2010-01-19 16:55:22 UTC (rev 12263)
@@ -435,6 +435,9 @@
                     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 @@
     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)

Modified: 
django/branches/releases/1.1.X/tests/regressiontests/model_fields/models.py
===================================================================
--- django/branches/releases/1.1.X/tests/regressiontests/model_fields/models.py 
2010-01-19 01:25:30 UTC (rev 12262)
+++ django/branches/releases/1.1.X/tests/regressiontests/model_fields/models.py 
2010-01-19 16:55:22 UTC (rev 12263)
@@ -52,6 +52,10 @@
     s = models.SlugField(max_length=255)
 
 
+class Post(models.Model):
+    title = models.CharField(max_length=100)
+    body = models.TextField()
+    
 ###############################################################################
 # ImageField
 

Modified: 
django/branches/releases/1.1.X/tests/regressiontests/model_fields/tests.py
===================================================================
--- django/branches/releases/1.1.X/tests/regressiontests/model_fields/tests.py  
2010-01-19 01:25:30 UTC (rev 12262)
+++ django/branches/releases/1.1.X/tests/regressiontests/model_fields/tests.py  
2010-01-19 16:55:22 UTC (rev 12263)
@@ -6,7 +6,7 @@
 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 @@
         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)
+        

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.


Reply via email to