[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):
|
||||
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()
|
||||
|
|
|
@ -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`).
|
||||
|
|
|
@ -557,3 +557,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…
Reference in New Issue