summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2014-04-28 15:27:36 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2014-05-05 13:06:51 +0300
commit402fc4f6c9921f56eecbb6e3fc69154270be6468 (patch)
treee345417f5107e172a7da022243fcbccd86310e55 /tests
parent87d873ab476e2d213caa4cbdf11fddacb5755890 (diff)
[1.7.x] Fixed #22429 -- Incorrect SQL when using ~Q and F
Backport of 5e1f4656b9 from master
Diffstat (limited to 'tests')
-rw-r--r--tests/queries/models.py15
-rw-r--r--tests/queries/tests.py17
2 files changed, 31 insertions, 1 deletions
diff --git a/tests/queries/models.py b/tests/queries/models.py
index 1083968d41..604eed5f07 100644
--- a/tests/queries/models.py
+++ b/tests/queries/models.py
@@ -660,3 +660,18 @@ class Employment(models.Model):
employer = models.ForeignKey(Company)
employee = models.ForeignKey(Person)
title = models.CharField(max_length=128)
+
+
+# Bug #22429
+
+class School(models.Model):
+ pass
+
+
+class Student(models.Model):
+ school = models.ForeignKey(School)
+
+
+class Classroom(models.Model):
+ school = models.ForeignKey(School)
+ students = models.ManyToManyField(Student, related_name='classroom')
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index 11404807a7..27d4f447bb 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -27,7 +27,7 @@ from .models import (
BaseA, FK1, Identifier, Program, Channel, Page, Paragraph, Chapter, Book,
MyObject, Order, OrderItem, SharedConnection, Task, Staff, StaffUser,
CategoryRelationship, Ticket21203Parent, Ticket21203Child, Person,
- Company, Employment, CustomPk, CustomPkTag)
+ Company, Employment, CustomPk, CustomPkTag, Classroom, School, Student)
class BaseQuerysetTest(TestCase):
@@ -3344,3 +3344,18 @@ class ReverseM2MCustomPkTests(TestCase):
self.assertQuerysetEqual(
CustomPkTag.objects.filter(custom_pk=cp1), [cpt1],
lambda x: x)
+
+
+class Ticket22429Tests(TestCase):
+ def test_ticket_22429(self):
+ sc1 = School.objects.create()
+ st1 = Student.objects.create(school=sc1)
+
+ sc2 = School.objects.create()
+ st2 = Student.objects.create(school=sc2)
+
+ cr = Classroom.objects.create(school=sc1)
+ cr.students.add(st1)
+
+ queryset = Student.objects.filter(~Q(classroom__school=F('school')))
+ self.assertQuerysetEqual(queryset, [st2], lambda x: x)