summaryrefslogtreecommitdiff
path: root/tests/regressiontests
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-24 03:59:38 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-24 03:59:38 +0000
commitfd46f673bd83d8ed26ed54075439236e65f2d015 (patch)
tree7c9d0b73d022029c5f2700a1af7039f6ff53d969 /tests/regressiontests
parentc5aa6fa71067b001c1d549b33ac4e2b409a70c75 (diff)
Fixed #9926 -- Fixes for some select_related() situations.
Using select_related(...) across a nullable relation to a multi-table model inheritance situation no longer excludes results. Thanks to AdamG for a test demonstrating part of the problem. git-svn-id: http://code.djangoproject.com/svn/django/trunk@10136 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests')
-rw-r--r--tests/regressiontests/queries/models.py18
-rw-r--r--tests/regressiontests/select_related_regress/models.py25
2 files changed, 41 insertions, 2 deletions
diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py
index 06c0ebf6e9..88d08b0bd1 100644
--- a/tests/regressiontests/queries/models.py
+++ b/tests/regressiontests/queries/models.py
@@ -16,10 +16,17 @@ try:
except NameError:
from django.utils.itercompat import sorted
+class DumbCategory(models.Model):
+ pass
+
+class NamedCategory(DumbCategory):
+ name = models.CharField(max_length=10)
+
class Tag(models.Model):
name = models.CharField(max_length=10)
parent = models.ForeignKey('self', blank=True, null=True,
related_name='children')
+ category = models.ForeignKey(NamedCategory, null=True, default=None)
class Meta:
ordering = ['name']
@@ -266,8 +273,9 @@ class Plaything(models.Model):
__test__ = {'API_TESTS':"""
->>> t1 = Tag.objects.create(name='t1')
->>> t2 = Tag.objects.create(name='t2', parent=t1)
+>>> generic = NamedCategory.objects.create(name="Generic")
+>>> t1 = Tag.objects.create(name='t1', category=generic)
+>>> t2 = Tag.objects.create(name='t2', parent=t1, category=generic)
>>> t3 = Tag.objects.create(name='t3', parent=t1)
>>> t4 = Tag.objects.create(name='t4', parent=t3)
>>> t5 = Tag.objects.create(name='t5', parent=t3)
@@ -726,6 +734,12 @@ Bug #6981
>>> Tag.objects.select_related('parent').order_by('name')
[<Tag: t1>, <Tag: t2>, <Tag: t3>, <Tag: t4>, <Tag: t5>]
+Bug #9926
+>>> Tag.objects.select_related("parent", "category").order_by('name')
+[<Tag: t1>, <Tag: t2>, <Tag: t3>, <Tag: t4>, <Tag: t5>]
+>>> Tag.objects.select_related('parent', "parent__category").order_by('name')
+[<Tag: t1>, <Tag: t2>, <Tag: t3>, <Tag: t4>, <Tag: t5>]
+
Bug #6180, #6203 -- dates with limits and/or counts
>>> Item.objects.count()
4
diff --git a/tests/regressiontests/select_related_regress/models.py b/tests/regressiontests/select_related_regress/models.py
index eca620ccf7..b2664f9398 100644
--- a/tests/regressiontests/select_related_regress/models.py
+++ b/tests/regressiontests/select_related_regress/models.py
@@ -65,6 +65,23 @@ class Client(models.Model):
state = models.ForeignKey(State, null=True)
status = models.ForeignKey(ClientStatus)
+# Some model inheritance exercises
+class Parent(models.Model):
+ name = models.CharField(max_length=10)
+
+ def __unicode__(self):
+ return self.name
+
+class Child(Parent):
+ value = models.IntegerField()
+
+class Item(models.Model):
+ name = models.CharField(max_length=10)
+ child = models.ForeignKey(Child, null=True)
+
+ def __unicode__(self):
+ return self.name
+
__test__ = {'API_TESTS': """
Regression test for bug #7110. When using select_related(), we must query the
Device and Building tables using two different aliases (each) in order to
@@ -140,4 +157,12 @@ for country before getting status.
<ClientStatus: ClientStatus object>
>>> Client.objects.select_related('status')[0].status
<ClientStatus: ClientStatus object>
+
+Exercising select_related() with multi-table model inheritance.
+>>> c1 = Child.objects.create(name="child1", value=42)
+>>> _ = Item.objects.create(name="item1", child=c1)
+>>> _ = Item.objects.create(name="item2")
+>>> Item.objects.select_related("child").order_by("name")
+[<Item: item1>, <Item: item2>]
+
"""}