소스 검색

Fixed #29142 -- Fixed crash when OuterRef is used with an operator.

Matthew Schinckel 7 년 전
부모
커밋
c412926a2e
2개의 변경된 파일8개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      django/db/models/expressions.py
  2. 5 0
      tests/expressions/tests.py

+ 3 - 0
django/db/models/expressions.py

@@ -525,6 +525,9 @@ class ResolvedOuterRef(F):
     def _prepare(self, output_field=None):
         return self
 
+    def relabeled_clone(self, relabels):
+        return self
+
 
 class OuterRef(F):
     def resolve_expression(self, query=None, allow_joins=True, reuse=None, summarize=False, for_save=False):

+ 5 - 0
tests/expressions/tests.py

@@ -575,6 +575,11 @@ class BasicExpressionsTests(TestCase):
         outer = Result.objects.filter(pk__in=Subquery(inner.values('pk')))
         self.assertFalse(outer.exists())
 
+    def test_outerref_with_operator(self):
+        inner = Company.objects.filter(num_employees=OuterRef('ceo__salary') + 2)
+        outer = Company.objects.filter(pk__in=Subquery(inner.values('pk')))
+        self.assertEqual(outer.get().name, 'Test GmbH')
+
 
 class IterableLookupInnerExpressionsTests(TestCase):
     @classmethod