diff options
author | Tim Graham <timograham@gmail.com> | 2015-08-20 12:46:14 -0400 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2015-08-27 10:04:23 -0400 |
commit | afee534e7ab3ea66be695678556179a7b747b101 (patch) | |
tree | 140b6b446aeacc9255dd3ccbdfefc9982ef7ed72 | |
parent | 956df84a613d4b9a92c979e46557243d288282c8 (diff) | |
download | django-24525.tar.gz |
Fixed #24525 -- Fixed AssertionError in some complex queries.24525
-rw-r--r-- | django/db/models/sql/query.py | 1 | ||||
-rw-r--r-- | docs/releases/1.8.5.txt | 2 | ||||
-rw-r--r-- | tests/queries/models.py | 1 | ||||
-rw-r--r-- | tests/queries/tests.py | 17 |
4 files changed, 17 insertions, 4 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index f0845cd73a..17dc5e9920 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -789,7 +789,6 @@ class Query(object): relabelling any references to them in select columns and the where clause. """ - assert set(change_map.keys()).intersection(set(change_map.values())) == set() def relabel_column(col): if isinstance(col, (list, tuple)): diff --git a/docs/releases/1.8.5.txt b/docs/releases/1.8.5.txt index 3f1674b979..464166a60b 100644 --- a/docs/releases/1.8.5.txt +++ b/docs/releases/1.8.5.txt @@ -12,6 +12,8 @@ Bugfixes * Fixed ``AssertionError`` in some delete queries with a model containing a field that is both a foreign and primary key (:ticket:`24951`). +* Fixed ``AssertionError`` in some complex queries (:ticket:`24525`). + * Fixed a migrations crash with ``GenericForeignKey`` (:ticket:`25040`). * Made ``translation.override()`` clear the overridden language when a translation isn't initially active (:ticket:`25295`). diff --git a/tests/queries/models.py b/tests/queries/models.py index 47c96de612..6cf02d225b 100644 --- a/tests/queries/models.py +++ b/tests/queries/models.py @@ -49,6 +49,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, models.SET_NULL, blank=True, null=True) class Meta: ordering = ['note'] diff --git a/tests/queries/tests.py b/tests/queries/tests.py index c041669ae0..3738fb1dda 100644 --- a/tests/queries/tests.py +++ b/tests/queries/tests.py @@ -1180,7 +1180,7 @@ class Queries1Tests(BaseQuerysetTest): msg = ( "Cannot resolve keyword 'unknown_field' into field. Choices are: " "annotation, category, category_id, children, id, item, " - "managedmodel, name, parent, parent_id" + "managedmodel, name, note, parent, parent_id" ) with self.assertRaisesMessage(FieldError, msg): Tag.objects.filter(unknown_field__name='generic') @@ -1326,8 +1326,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) @@ -1342,6 +1342,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, |