mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
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
|
In this case, the reference to the outer query has been resolved because
|
||||||
the inner query has been used as a subquery.
|
the inner query has been used as a subquery.
|
||||||
"""
|
"""
|
||||||
|
contains_aggregate = False
|
||||||
|
|
||||||
def as_sql(self, *args, **kwargs):
|
def as_sql(self, *args, **kwargs):
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
'This queryset contains a reference to an outer query and may '
|
'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')))
|
outer = Company.objects.filter(pk__in=Subquery(inner.values('pk')))
|
||||||
self.assertEqual(outer.get().name, 'Test GmbH')
|
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):
|
def test_pickle_expression(self):
|
||||||
expr = Value(1, output_field=models.IntegerField())
|
expr = Value(1, output_field=models.IntegerField())
|
||||||
expr.convert_value # populate cached property
|
expr.convert_value # populate cached property
|
||||||
|
Loading…
Reference in New Issue
Block a user