mirror of https://github.com/django/django.git
Added test to demonstrate issue 11387 isn't there anymore.
Thanks adurdin for the report and patch. Fixes #11387.
This commit is contained in:
parent
c4b6659269
commit
2ca37af621
|
@ -6,7 +6,7 @@ from django.utils.encoding import python_2_unicode_compatible
|
|||
|
||||
__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
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.db.models import Q
|
|||
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 @@ class GenericRelationTests(TestCase):
|
|||
)
|
||||
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)
|
||||
|
|
Loading…
Reference in New Issue