Author: jbronn Date: 2009-12-18 19:11:33 -0600 (Fri, 18 Dec 2009) New Revision: 11911
Added: django/branches/soc2009/multidb/tests/regressiontests/defer_regress/tests.py Modified: django/branches/soc2009/multidb/django/db/models/sql/compiler.py django/branches/soc2009/multidb/tests/regressiontests/defer_regress/models.py Log: [soc2009/multidb] Fixed #12402 -- `QuerySet.defer` now interacts properly with `SQLCompiler` subclasses that implement `resolve_columns`. Modified: django/branches/soc2009/multidb/django/db/models/sql/compiler.py =================================================================== --- django/branches/soc2009/multidb/django/db/models/sql/compiler.py 2009-12-18 10:08:05 UTC (rev 11910) +++ django/branches/soc2009/multidb/django/db/models/sql/compiler.py 2009-12-19 01:11:33 UTC (rev 11911) @@ -627,6 +627,13 @@ fields = self.query.select_fields + self.query.related_select_fields else: fields = self.query.model._meta.fields + # If the field was deferred, exclude it from being passed + # into `resolve_columns` because it wasn't selected. + only_load = self.deferred_to_columns() + if only_load: + db_table = self.query.model._meta.db_table + fields = [f for f in fields if db_table in only_load and + f.column in only_load[db_table]] row = self.resolve_columns(row, fields) if self.query.aggregate_select: Modified: django/branches/soc2009/multidb/tests/regressiontests/defer_regress/models.py =================================================================== --- django/branches/soc2009/multidb/tests/regressiontests/defer_regress/models.py 2009-12-18 10:08:05 UTC (rev 11910) +++ django/branches/soc2009/multidb/tests/regressiontests/defer_regress/models.py 2009-12-19 01:11:33 UTC (rev 11911) @@ -31,6 +31,10 @@ def __unicode__(self): return self.name +class ResolveThis(models.Model): + num = models.FloatField() + name = models.CharField(max_length=16) + __test__ = {"regression_tests": """ Deferred fields should really be deferred and not accidentally use the field's default value just because they aren't passed to __init__. Added: django/branches/soc2009/multidb/tests/regressiontests/defer_regress/tests.py =================================================================== --- django/branches/soc2009/multidb/tests/regressiontests/defer_regress/tests.py (rev 0) +++ django/branches/soc2009/multidb/tests/regressiontests/defer_regress/tests.py 2009-12-19 01:11:33 UTC (rev 11911) @@ -0,0 +1,9 @@ +from django.test import TestCase +from models import ResolveThis + +class DeferRegressionTest(TestCase): + def test_resolve_columns(self): + rt = ResolveThis.objects.create(num=5.0, name='Foobar') + qs = ResolveThis.objects.defer('num') + self.assertEqual(1, qs.count()) + self.assertEqual('Foobar', qs[0].name) -- 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.