1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

[1.11.x] Fixed #26522 -- Fixed a nondeterministic AssertionError in QuerySet combining.

Thanks Andrew Brown for the test case.

Backport of 9bbb6e2d25 from master
This commit is contained in:
Bo Marchman
2017-03-02 09:36:25 -05:00
committed by Tim Graham
parent 511dfb336f
commit 8d66bffbae
5 changed files with 25 additions and 4 deletions

View File

@@ -28,9 +28,9 @@ from .models import (
ProxyCategory, ProxyObjectA, ProxyObjectB, Ranking, Related,
RelatedIndividual, RelatedObject, Report, ReportComment, ReservedName,
Responsibility, School, SharedConnection, SimpleCategory, SingleObject,
SpecialCategory, Staff, StaffUser, Student, Tag, Task, Ticket21203Child,
Ticket21203Parent, Ticket23605A, Ticket23605B, Ticket23605C, TvChef, Valid,
X,
SpecialCategory, Staff, StaffUser, Student, Tag, Task, Teacher,
Ticket21203Child, Ticket21203Parent, Ticket23605A, Ticket23605B,
Ticket23605C, TvChef, Valid, X,
)
@@ -1391,6 +1391,18 @@ class Queries4Tests(TestCase):
self.assertEqual(len(combined), 1)
self.assertEqual(combined[0].name, 'a1')
def test_join_reuse_order(self):
# Join aliases are reused in order. This shouldn't raise AssertionError
# because change_map contains a circular reference (#26522).
s1 = School.objects.create()
s2 = School.objects.create()
s3 = School.objects.create()
t1 = Teacher.objects.create()
otherteachers = Teacher.objects.exclude(pk=t1.pk).exclude(friends=t1)
qs1 = otherteachers.filter(schools=s1).filter(schools=s2)
qs2 = otherteachers.filter(schools=s1).filter(schools=s3)
self.assertQuerysetEqual(qs1 | qs2, [])
def test_ticket7095(self):
# Updates that are filtered on the model being updated are somewhat
# tricky in MySQL.