[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. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9917 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
7fdd26c582
commit
106bd0f49e
|
@ -687,8 +687,9 @@ class BaseQuery(object):
|
|||
# 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.
|
||||
|
|
|
@ -237,6 +237,32 @@ class PointerA(models.Model):
|
|||
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')
|
||||
|
|
Loading…
Reference in New Issue