[1.8.x] Fixed #24744 - Fixed relabeled_clone for the Transform
Backport of 08232ef84d
from master
This commit is contained in:
parent
f4c09d3e42
commit
b4b13759f8
|
@ -72,8 +72,13 @@ class Transform(RegisterLookupMixin):
|
||||||
def output_field(self):
|
def output_field(self):
|
||||||
return self.lhs.output_field
|
return self.lhs.output_field
|
||||||
|
|
||||||
|
def copy(self):
|
||||||
|
return copy(self)
|
||||||
|
|
||||||
def relabeled_clone(self, relabels):
|
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):
|
def get_group_by_cols(self):
|
||||||
return self.lhs.get_group_by_cols()
|
return self.lhs.get_group_by_cols()
|
||||||
|
|
|
@ -57,3 +57,5 @@ Bugfixes
|
||||||
* Corrected join promotion for multiple ``Case`` expressions. Annotating a
|
* Corrected join promotion for multiple ``Case`` expressions. Annotating a
|
||||||
query with multiple ``Case`` expressions could unexpectedly filter out
|
query with multiple ``Case`` expressions could unexpectedly filter out
|
||||||
results (:ticket:`24924`).
|
results (:ticket:`24924`).
|
||||||
|
|
||||||
|
* Fixed usage of transforms in subqueries (:ticket:`24744`).
|
||||||
|
|
|
@ -557,3 +557,18 @@ class CustomisedMethodsTests(TestCase):
|
||||||
def test_overridden_get_transform_chain(self):
|
def test_overridden_get_transform_chain(self):
|
||||||
q = CustomModel.objects.filter(field__transformfunc_banana__transformfunc_pear=3)
|
q = CustomModel.objects.filter(field__transformfunc_banana__transformfunc_pear=3)
|
||||||
self.assertIn('pear()', str(q.query))
|
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…
Reference in New Issue