diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2014-04-28 15:27:36 +0300 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2014-05-05 13:06:51 +0300 |
| commit | 402fc4f6c9921f56eecbb6e3fc69154270be6468 (patch) | |
| tree | e345417f5107e172a7da022243fcbccd86310e55 /tests | |
| parent | 87d873ab476e2d213caa4cbdf11fddacb5755890 (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.py | 15 | ||||
| -rw-r--r-- | tests/queries/tests.py | 17 |
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) |
