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.