summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-04-04 05:34:23 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-04-04 05:34:23 +0000
commit0a89a57ffc491f2d1ff9a19e792739f67a945be3 (patch)
tree30ae16f25deb0e011dba8c9f742bf49c4f2390a3 /tests
parentdded5f52cc1dbe0e58b64a3217e12e72da7bed23 (diff)
Fixed deferred fields and select_related() interaction.
Loading related models when some fields were deferred was resulting in incorrect offsets being used into the results row, causing the wrong data to be assigned to attributes. Refs #10710. This fixes the first of two bugs reported there. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10383 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/defer_regress/models.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/regressiontests/defer_regress/models.py b/tests/regressiontests/defer_regress/models.py
index 0cd6facff7..d7ba713061 100644
--- a/tests/regressiontests/defer_regress/models.py
+++ b/tests/regressiontests/defer_regress/models.py
@@ -17,6 +17,18 @@ class Item(models.Model):
class RelatedItem(models.Model):
item = models.ForeignKey(Item)
+class Child(models.Model):
+ name = models.CharField(max_length=10)
+ value = models.IntegerField()
+
+class Leaf(models.Model):
+ name = models.CharField(max_length=10)
+ child = models.ForeignKey(Child)
+ value = models.IntegerField(default=42)
+
+ def __unicode__(self):
+ return self.name
+
__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__.
@@ -66,7 +78,15 @@ True
>>> r.item == i
True
+Some further checks for select_related() and inherited model behaviour
+(regression for #10710).
+
+>>> c1 = Child.objects.create(name="c1", value=42)
+>>> obj = Leaf.objects.create(name="l1", child=c1)
+>>> obj = Leaf.objects.only("name", "child").select_related()[0]
+>>> obj.child.name
+u'c1'
"""
}