Fixed #28621 -- Fixed crash of annotations with OuterRef.
This commit is contained in:
parent
c4447ad231
commit
2a431db0f5
|
@ -527,6 +527,8 @@ class ResolvedOuterRef(F):
|
|||
In this case, the reference to the outer query has been resolved because
|
||||
the inner query has been used as a subquery.
|
||||
"""
|
||||
contains_aggregate = False
|
||||
|
||||
def as_sql(self, *args, **kwargs):
|
||||
raise ValueError(
|
||||
'This queryset contains a reference to an outer query and may '
|
||||
|
|
|
@ -591,6 +591,17 @@ class BasicExpressionsTests(TestCase):
|
|||
outer = Company.objects.filter(pk__in=Subquery(inner.values('pk')))
|
||||
self.assertEqual(outer.get().name, 'Test GmbH')
|
||||
|
||||
def test_annotation_with_outerref(self):
|
||||
gmbh_salary = Company.objects.annotate(
|
||||
max_ceo_salary_raise=Subquery(
|
||||
Company.objects.annotate(
|
||||
salary_raise=OuterRef('num_employees') + F('num_employees'),
|
||||
).order_by('-salary_raise').values('salary_raise')[:1],
|
||||
output_field=models.IntegerField(),
|
||||
),
|
||||
).get(pk=self.gmbh.pk)
|
||||
self.assertEqual(gmbh_salary.max_ceo_salary_raise, 2332)
|
||||
|
||||
def test_pickle_expression(self):
|
||||
expr = Value(1, output_field=models.IntegerField())
|
||||
expr.convert_value # populate cached property
|
||||
|
|
Loading…
Reference in New Issue