summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Sokolovskiy <me@asokolovskiy.com>2015-06-04 15:51:07 +0100
committerTim Graham <timograham@gmail.com>2015-06-06 09:04:53 -0400
commit08232ef84d4959826ad5136f183c9fc5bedf0599 (patch)
tree68a8d8808cbb558c7cecfbc5a20aa3055f7541d2
parentdee1bcd08a013ba5ffd8d1ec9b6628702f755066 (diff)
Fixed #24744 - Fixed relabeled_clone for the Transform
-rw-r--r--django/db/models/lookups.py7
-rw-r--r--docs/releases/1.8.3.txt2
-rw-r--r--tests/custom_lookups/tests.py15
3 files changed, 23 insertions, 1 deletions
diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py
index 45974093b4..9bcf8d6303 100644
--- a/django/db/models/lookups.py
+++ b/django/db/models/lookups.py
@@ -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()
diff --git a/docs/releases/1.8.3.txt b/docs/releases/1.8.3.txt
index 6ac0d3f592..dc5edbcb9e 100644
--- a/docs/releases/1.8.3.txt
+++ b/docs/releases/1.8.3.txt
@@ -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`).
diff --git a/tests/custom_lookups/tests.py b/tests/custom_lookups/tests.py
index 1b069047e4..dd8d431d3d 100644
--- a/tests/custom_lookups/tests.py
+++ b/tests/custom_lookups/tests.py
@@ -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)