Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

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

Thanks adurdin for the report and patch. Fixes #11387.
  • Loading branch information...
commit 2ca37af621c077ab805b8fcb0fb18aef0cfe802d 1 parent c4b6659
@ramiro ramiro authored
View
9 tests/regressiontests/generic_relations_regress/models.py
@@ -6,7 +6,7 @@
__all__ = ('Link', 'Place', 'Restaurant', 'Person', 'Address',
'CharLink', 'TextLink', 'OddRelation1', 'OddRelation2',
- 'Contact', 'Organization', 'Note')
+ 'Contact', 'Organization', 'Note', 'Company')
@python_2_unicode_compatible
class Link(models.Model):
@@ -84,3 +84,10 @@ class Organization(models.Model):
name = models.CharField(max_length=255)
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
20 tests/regressiontests/generic_relations_regress/tests.py
@@ -2,7 +2,7 @@
from django.test import TestCase
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):
@@ -80,3 +80,21 @@ def test_join_reuse(self):
)
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)
Please sign in to comment.
Something went wrong with that request. Please try again.