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:27:54 +0300
commit0e3704963693ddfaaa525054c42333f6ffdb4b47 (patch)
treeca52e6ed08104c48486ef442d0a97d277cbc5480 /tests
parent034866204b39f797c73997b03cd90443aa03aa91 (diff)
[1.6.x] Fixed #22429 -- Incorrect SQL when using ~Q and F
Backpatch of 5e1f4656b98816c96a1cc051224c1b699db480e0 from master. Conflicts: django/db/models/sql/query.py tests/queries/models.py tests/queries/tests.py
Diffstat (limited to 'tests')
-rw-r--r--tests/queries/models.py15
-rw-r--r--tests/queries/tests.py18
2 files changed, 32 insertions, 1 deletions
diff --git a/tests/queries/models.py b/tests/queries/models.py
index 6d9e35d0bf..431d3c0501 100644
--- a/tests/queries/models.py
+++ b/tests/queries/models.py
@@ -536,3 +536,18 @@ class Ticket21203Parent(models.Model):
class Ticket21203Child(models.Model):
childid = models.AutoField(primary_key=True)
parent = models.ForeignKey(Ticket21203Parent)
+
+
+# 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 e38d573e80..833f65f738 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -27,7 +27,8 @@ from .models import (
ModelA, ModelB, ModelC, ModelD, Responsibility, Job, JobResponsibilities,
BaseA, FK1, Identifier, Program, Channel, Page, Paragraph, Chapter, Book,
MyObject, Order, OrderItem, Task, Staff, StaffUser, Ticket21203Parent,
- Ticket21203Child)
+ Ticket21203Child, Classroom, School, Student)
+
class BaseQuerysetTest(TestCase):
def assertValueQuerysetEqual(self, qs, values):
@@ -3105,3 +3106,18 @@ class ForeignKeyToBaseExcludeTests(TestCase):
SpecialCategory.objects.filter(categoryitem__id=c1.pk),
[sc1], 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)