From 62347208bb0cef6990699d7373fa06e2e12ead07 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Thu, 20 Aug 2015 12:46:14 -0400 Subject: [1.8.x] Fixed #24525 -- Fixed AssertionError in some complex queries. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Thanks Anssi Kääriäinen for providing the solution. Backport of 2dc9ec5616a942de3a0886a707f93988f56dd594 from master --- tests/queries/models.py | 1 + tests/queries/tests.py | 24 ++++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/queries/models.py b/tests/queries/models.py index 5d63ae9ea8..81f3b3f390 100644 --- a/tests/queries/models.py +++ b/tests/queries/models.py @@ -45,6 +45,7 @@ class Tag(models.Model): class Note(models.Model): note = models.CharField(max_length=100) misc = models.CharField(max_length=10) + tag = models.ForeignKey(Tag, blank=True, null=True) class Meta: ordering = ['note'] diff --git a/tests/queries/tests.py b/tests/queries/tests.py index 6ba799d244..84871e8dfe 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -1177,6 +1177,15 @@ class Queries1Tests(BaseQuerysetTest): self.assertEqual(len(w), 1) self.assertTrue(issubclass(w[0].category, RemovedInDjango19Warning)) + def test_lookup_constraint_fielderror(self): + msg = ( + "Cannot resolve keyword 'unknown_field' into field. Choices are: " + "annotation, category, category_id, children, id, item, " + "managedmodel, name, note, parent, parent_id" + ) + with self.assertRaisesMessage(FieldError, msg): + Tag.objects.filter(unknown_field__name='generic') + class Queries2Tests(TestCase): @classmethod @@ -1319,8 +1328,8 @@ class Queries4Tests(BaseQuerysetTest): generic = NamedCategory.objects.create(name="Generic") cls.t1 = Tag.objects.create(name='t1', category=generic) - n1 = Note.objects.create(note='n1', misc='foo', id=1) - n2 = Note.objects.create(note='n2', misc='bar', id=2) + n1 = Note.objects.create(note='n1', misc='foo') + n2 = Note.objects.create(note='n2', misc='bar') e1 = ExtraInfo.objects.create(info='e1', note=n1) e2 = ExtraInfo.objects.create(info='e2', note=n2) @@ -1335,6 +1344,17 @@ class Queries4Tests(BaseQuerysetTest): Item.objects.create(name='i1', created=datetime.datetime.now(), note=n1, creator=cls.a1) Item.objects.create(name='i2', created=datetime.datetime.now(), note=n1, creator=cls.a3) + def test_ticket24525(self): + tag = Tag.objects.create() + anth100 = tag.note_set.create(note='ANTH', misc='100') + math101 = tag.note_set.create(note='MATH', misc='101') + s1 = tag.annotation_set.create(name='1') + s2 = tag.annotation_set.create(name='2') + s1.notes = [math101, anth100] + s2.notes = [math101] + result = math101.annotation_set.all() & tag.annotation_set.exclude(notes__in=[anth100]) + self.assertEqual(list(result), [s2]) + def test_ticket11811(self): unsaved_category = NamedCategory(name="Other") with six.assertRaisesRegex(self, ValueError, -- cgit v1.3