Author: mtredinnick
Date: 2009-02-27 21:02:52 -0600 (Fri, 27 Feb 2009)
New Revision: 9917
Modified:
django/branches/releases/1.0.X/django/db/models/sql/query.py
django/branches/releases/1.0.X/tests/regressiontests/queries/models.py
Log:
[1.0.X] Fixed #10028 -- Fixed a problem when ordering by related models.
Some results were inadvertently being excluded if we were ordering across a
nullable relation which itself ordering by a non-nullable relation.
Backport of r9916 from trunk.
Modified: django/branches/releases/1.0.X/django/db/models/sql/query.py
===================================================================
--- django/branches/releases/1.0.X/django/db/models/sql/query.py
2009-02-28 02:59:40 UTC (rev 9916)
+++ django/branches/releases/1.0.X/django/db/models/sql/query.py
2009-02-28 03:02:52 UTC (rev 9917)
@@ -687,8 +687,9 @@
# the model.
self.ref_alias(alias)
- # Must use left outer joins for nullable fields.
- self.promote_alias_chain(joins)
+ # Must use left outer joins for nullable fields and their relations.
+ self.promote_alias_chain(joins,
+ self.alias_map[joins[0]][JOIN_TYPE] == self.LOUTER)
# If we get to this point and the field is a relation to another model,
# append the default ordering for that model.
Modified: django/branches/releases/1.0.X/tests/regressiontests/queries/models.py
===================================================================
--- django/branches/releases/1.0.X/tests/regressiontests/queries/models.py
2009-02-28 02:59:40 UTC (rev 9916)
+++ django/branches/releases/1.0.X/tests/regressiontests/queries/models.py
2009-02-28 03:02:52 UTC (rev 9917)
@@ -237,7 +237,33 @@
class PointerB(models.Model):
connection = models.ForeignKey(SharedConnection)
+# Multi-layer ordering
+class SingleObject(models.Model):
+ name = models.CharField(max_length=10)
+ class Meta:
+ ordering = ['name']
+
+ def __unicode__(self):
+ return self.name
+
+class RelatedObject(models.Model):
+ single = models.ForeignKey(SingleObject)
+
+ class Meta:
+ ordering = ['single']
+
+class Plaything(models.Model):
+ name = models.CharField(max_length=10)
+ others = models.ForeignKey(RelatedObject, null=True)
+
+ class Meta:
+ ordering = ['others']
+
+ def __unicode__(self):
+ return self.name
+
+
__test__ = {'API_TESTS':"""
>>> t1 = Tag.objects.create(name='t1')
>>> t2 = Tag.objects.create(name='t2', parent=t1)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---