diff options
| author | Alberto Avila <albertoavila@gmail.com> | 2016-01-08 14:20:15 -0600 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-01-13 08:53:01 -0500 |
| commit | 16a52cff3250269d8461b5b2877d0929e463adcd (patch) | |
| tree | 34d35def0d3a7d817291e7c683eae64f5420dcdc | |
| parent | 12554693e4330e0b9c57b0769915f4c793b244ee (diff) | |
[1.9.x] Refs #26071 -- Added test for __in lookup in a Case expression.
Forwardport of 5b3c66d8b64add684489f5010e43de73e7acdd04 from stable/1.8.x
| -rw-r--r-- | docs/releases/1.8.9.txt | 3 | ||||
| -rw-r--r-- | tests/expressions_case/tests.py | 13 |
2 files changed, 15 insertions, 1 deletions
diff --git a/docs/releases/1.8.9.txt b/docs/releases/1.8.9.txt index 080d6506e8..8c5445b549 100644 --- a/docs/releases/1.8.9.txt +++ b/docs/releases/1.8.9.txt @@ -23,3 +23,6 @@ Bugfixes ``db_index=True`` or ``unique=True`` to a ``CharField`` or ``TextField`` that already had the other specified, or when removing one of them from a field that had both (:ticket:`26034`). + +* Fixed a crash when using an ``__in`` lookup inside a ``Case`` expression + (:ticket:`26071`). diff --git a/tests/expressions_case/tests.py b/tests/expressions_case/tests.py index d386cabbc9..f9cdfc5d5c 100644 --- a/tests/expressions_case/tests.py +++ b/tests/expressions_case/tests.py @@ -8,7 +8,7 @@ from uuid import UUID from django.core.exceptions import FieldError from django.db import connection, models -from django.db.models import F, Q, Max, Min, Value +from django.db.models import F, Q, Max, Min, Sum, Value from django.db.models.expressions import Case, When from django.test import TestCase from django.utils import six @@ -119,6 +119,17 @@ class CaseExpressionTests(TestCase): transform=attrgetter('integer', 'join_test') ) + def test_annotate_with_in_clause(self): + fk_rels = FKCaseTestModel.objects.filter(integer__in=[5]) + self.assertQuerysetEqual( + CaseTestModel.objects.only('pk', 'integer').annotate(in_test=Sum(Case( + When(fk_rel__in=fk_rels, then=F('fk_rel__integer')), + default=Value(0), + ))).order_by('pk'), + [(1, 0), (2, 0), (3, 0), (2, 0), (3, 0), (3, 0), (4, 5)], + transform=attrgetter('integer', 'in_test') + ) + def test_annotate_with_join_in_condition(self): self.assertQuerysetEqual( CaseTestModel.objects.annotate(join_test=Case( |
