Added test to demonstrate issue 11387 isn't there anymore.

Thanks adurdin for the report and patch. Fixes #11387.
This commit is contained in:
Ramiro Morales 2013-02-01 22:10:16 -03:00
parent c4b6659269
commit 2ca37af621
2 changed files with 27 additions and 2 deletions

View File

@ -6,7 +6,7 @@ from django.utils.encoding import python_2_unicode_compatible
__all__ = ('Link', 'Place', 'Restaurant', 'Person', 'Address', __all__ = ('Link', 'Place', 'Restaurant', 'Person', 'Address',
'CharLink', 'TextLink', 'OddRelation1', 'OddRelation2', 'CharLink', 'TextLink', 'OddRelation1', 'OddRelation2',
'Contact', 'Organization', 'Note') 'Contact', 'Organization', 'Note', 'Company')
@python_2_unicode_compatible @python_2_unicode_compatible
class Link(models.Model): class Link(models.Model):
@ -84,3 +84,10 @@ class Organization(models.Model):
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
contacts = models.ManyToManyField(Contact, related_name='organizations') contacts = models.ManyToManyField(Contact, related_name='organizations')
@python_2_unicode_compatible
class Company(models.Model):
name = models.CharField(max_length=100)
links = generic.GenericRelation(Link)
def __str__(self):
return "Company: %s" % self.name

View File

@ -2,7 +2,7 @@ from django.db.models import Q
from django.test import TestCase from django.test import TestCase
from .models import (Address, Place, Restaurant, Link, CharLink, TextLink, from .models import (Address, Place, Restaurant, Link, CharLink, TextLink,
Person, Contact, Note, Organization, OddRelation1, OddRelation2) Person, Contact, Note, Organization, OddRelation1, OddRelation2, Company)
class GenericRelationTests(TestCase): class GenericRelationTests(TestCase):
@ -80,3 +80,21 @@ class GenericRelationTests(TestCase):
) )
self.assertEqual(str(qs.query).count('JOIN'), 2) self.assertEqual(str(qs.query).count('JOIN'), 2)
def test_generic_relation_ordering(self):
"""
Test that ordering over a generic relation does not include extraneous
duplicate results, nor excludes rows not participating in the relation.
"""
p1 = Place.objects.create(name="South Park")
p2 = Place.objects.create(name="The City")
c = Company.objects.create(name="Chubby's Intl.")
l1 = Link.objects.create(content_object=p1)
l2 = Link.objects.create(content_object=c)
places = list(Place.objects.order_by('links__id'))
def count_places(place):
return len(filter(lambda p: p.id == place.id, places))
self.assertEqual(len(places), 2)
self.assertEqual(count_places(p1), 1)
self.assertEqual(count_places(p2), 1)