summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-22 01:45:22 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-22 01:45:22 +0000
commit5ac154e06568b9815e85b32f144ab4ee10190a61 (patch)
treef95391869bfad2011b0a7cb17089b33005c5733d /tests
parent10923b42b33dc6b756d06b235c135bc40a35435a (diff)
Fixed deferred loading of fields with default values.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10113 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/defer_regress/__init__.py0
-rw-r--r--tests/regressiontests/defer_regress/models.py47
2 files changed, 47 insertions, 0 deletions
diff --git a/tests/regressiontests/defer_regress/__init__.py b/tests/regressiontests/defer_regress/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/regressiontests/defer_regress/__init__.py
diff --git a/tests/regressiontests/defer_regress/models.py b/tests/regressiontests/defer_regress/models.py
new file mode 100644
index 0000000000..c46d7ce176
--- /dev/null
+++ b/tests/regressiontests/defer_regress/models.py
@@ -0,0 +1,47 @@
+"""
+Regression tests for defer() / only() behavior.
+"""
+
+from django.conf import settings
+from django.db import connection, models
+
+class Item(models.Model):
+ name = models.CharField(max_length=10)
+ text = models.TextField(default="xyzzy")
+ value = models.IntegerField()
+ other_value = models.IntegerField(default=0)
+
+ 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__.
+
+>>> settings.DEBUG = True
+>>> _ = Item.objects.create(name="first", value=42)
+>>> obj = Item.objects.only("name", "other_value").get(name="first")
+
+# Accessing "name" doesn't trigger a new database query. Accessing "value" or
+# "text" should.
+>>> num = len(connection.queries)
+>>> obj.name
+u"first"
+>>> obj.other_value
+0
+>>> len(connection.queries) == num
+True
+>>> obj.value
+42
+>>> len(connection.queries) == num + 1 # Effect of values lookup.
+True
+>>> obj.text
+u"xyzzy"
+>>> len(connection.queries) == num + 2 # Effect of text lookup.
+True
+
+>>> settings.DEBUG = False
+
+"""
+}
+