Loading django/db/models/lookups.py +6 −1 Original line number Diff line number Diff line Loading @@ -70,8 +70,13 @@ class Transform(RegisterLookupMixin): def output_field(self): return self.lhs.output_field def copy(self): return copy(self) def relabeled_clone(self, relabels): return self.__class__(self.lhs.relabeled_clone(relabels)) copy = self.copy() copy.lhs = self.lhs.relabeled_clone(relabels) return copy def get_group_by_cols(self): return self.lhs.get_group_by_cols() Loading docs/releases/1.8.3.txt +2 −0 Original line number Diff line number Diff line Loading @@ -57,3 +57,5 @@ Bugfixes * Corrected join promotion for multiple ``Case`` expressions. Annotating a query with multiple ``Case`` expressions could unexpectedly filter out results (:ticket:`24924`). * Fixed usage of transforms in subqueries (:ticket:`24744`). tests/custom_lookups/tests.py +15 −0 Original line number Diff line number Diff line Loading @@ -559,3 +559,18 @@ class CustomisedMethodsTests(TestCase): def test_overridden_get_transform_chain(self): q = CustomModel.objects.filter(field__transformfunc_banana__transformfunc_pear=3) self.assertIn('pear()', str(q.query)) class SubqueryTransformTests(TestCase): def test_subquery_usage(self): models.IntegerField.register_lookup(Div3Transform) try: Author.objects.create(name='a1', age=1) a2 = Author.objects.create(name='a2', age=2) Author.objects.create(name='a3', age=3) Author.objects.create(name='a4', age=4) self.assertQuerysetEqual( Author.objects.order_by('name').filter(id__in=Author.objects.filter(age__div3=2)), [a2], lambda x: x) finally: models.IntegerField._unregister_lookup(Div3Transform) Loading
django/db/models/lookups.py +6 −1 Original line number Diff line number Diff line Loading @@ -70,8 +70,13 @@ class Transform(RegisterLookupMixin): def output_field(self): return self.lhs.output_field def copy(self): return copy(self) def relabeled_clone(self, relabels): return self.__class__(self.lhs.relabeled_clone(relabels)) copy = self.copy() copy.lhs = self.lhs.relabeled_clone(relabels) return copy def get_group_by_cols(self): return self.lhs.get_group_by_cols() Loading
docs/releases/1.8.3.txt +2 −0 Original line number Diff line number Diff line Loading @@ -57,3 +57,5 @@ Bugfixes * Corrected join promotion for multiple ``Case`` expressions. Annotating a query with multiple ``Case`` expressions could unexpectedly filter out results (:ticket:`24924`). * Fixed usage of transforms in subqueries (:ticket:`24744`).
tests/custom_lookups/tests.py +15 −0 Original line number Diff line number Diff line Loading @@ -559,3 +559,18 @@ class CustomisedMethodsTests(TestCase): def test_overridden_get_transform_chain(self): q = CustomModel.objects.filter(field__transformfunc_banana__transformfunc_pear=3) self.assertIn('pear()', str(q.query)) class SubqueryTransformTests(TestCase): def test_subquery_usage(self): models.IntegerField.register_lookup(Div3Transform) try: Author.objects.create(name='a1', age=1) a2 = Author.objects.create(name='a2', age=2) Author.objects.create(name='a3', age=3) Author.objects.create(name='a4', age=4) self.assertQuerysetEqual( Author.objects.order_by('name').filter(id__in=Author.objects.filter(age__div3=2)), [a2], lambda x: x) finally: models.IntegerField._unregister_lookup(Div3Transform)