Commit 08232ef8 authored by Andriy Sokolovskiy's avatar Andriy Sokolovskiy Committed by Tim Graham
Browse files

Fixed #24744 - Fixed relabeled_clone for the Transform

parent dee1bcd0
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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()
+2 −0
Original line number Diff line number Diff line
@@ -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`).
+15 −0
Original line number Diff line number Diff line
@@ -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)