From 00c690efbc0b10f67924687f24a7b30397bf47d9 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Mon, 20 Jan 2025 22:36:47 -0500 Subject: Fixed #36117 -- Raised ValueError when providing composite expressions to case / when. Remove redundant Case and When.resolve_expression to delegate composite expression support to BaseExpression. Thanks Jacob Tyler Walls for the report and test. --- tests/composite_pk/test_filter.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/composite_pk/test_filter.py b/tests/composite_pk/test_filter.py index aa2d9ebe36..fe942b9e5b 100644 --- a/tests/composite_pk/test_filter.py +++ b/tests/composite_pk/test_filter.py @@ -1,4 +1,13 @@ -from django.db.models import F, FilteredRelation, OuterRef, Q, Subquery, TextField +from django.db.models import ( + Case, + F, + FilteredRelation, + OuterRef, + Q, + Subquery, + TextField, + When, +) from django.db.models.functions import Cast from django.db.models.lookups import Exact from django.test import TestCase @@ -409,6 +418,14 @@ class CompositePKFilterTests(TestCase): with self.assertRaisesMessage(ValueError, msg): Comment.objects.filter(text__gt=Cast(F("pk"), TextField())).count() + def test_filter_case_when(self): + msg = "When expression does not support composite primary keys." + with self.assertRaisesMessage(ValueError, msg): + Comment.objects.filter(text=Case(When(text="", then="pk"))) + msg = "Case expression does not support composite primary keys." + with self.assertRaisesMessage(ValueError, msg): + Comment.objects.filter(text=Case(When(text="", then="text"), default="pk")) + def test_outer_ref_pk(self): subquery = Subquery(Comment.objects.filter(pk=OuterRef("pk")).values("id")) tests = [ -- cgit v1.3