Fixed #30099 -- Fixed invalid SQL when filtering a Subquery by an aggregate.
This commit is contained in:
parent
87bf35abd3
commit
f021c110d0
1
AUTHORS
1
AUTHORS
@ -618,6 +618,7 @@ answer newbie questions, and generally made Django that much better:
|
|||||||
Mykola Zamkovoi <nickzam@gmail.com>
|
Mykola Zamkovoi <nickzam@gmail.com>
|
||||||
Nagy Károly <charlie@rendszergazda.com>
|
Nagy Károly <charlie@rendszergazda.com>
|
||||||
Nasimul Haque <nasim.haque@gmail.com>
|
Nasimul Haque <nasim.haque@gmail.com>
|
||||||
|
Nasir Hussain <nasirhjafri@gmail.com>
|
||||||
Natalia Bidart <nataliabidart@gmail.com>
|
Natalia Bidart <nataliabidart@gmail.com>
|
||||||
Nate Bragg <jonathan.bragg@alum.rpi.edu>
|
Nate Bragg <jonathan.bragg@alum.rpi.edu>
|
||||||
Neal Norwitz <nnorwitz@google.com>
|
Neal Norwitz <nnorwitz@google.com>
|
||||||
|
@ -994,6 +994,7 @@ class Subquery(Expression):
|
|||||||
query which will be resolved when it is applied to that query.
|
query which will be resolved when it is applied to that query.
|
||||||
"""
|
"""
|
||||||
template = '(%(subquery)s)'
|
template = '(%(subquery)s)'
|
||||||
|
contains_aggregate = False
|
||||||
|
|
||||||
def __init__(self, queryset, output_field=None, **extra):
|
def __init__(self, queryset, output_field=None, **extra):
|
||||||
self.queryset = queryset
|
self.queryset = queryset
|
||||||
|
@ -534,6 +534,18 @@ class BasicExpressionsTests(TestCase):
|
|||||||
outer = Company.objects.filter(pk__in=Subquery(inner.values('pk')))
|
outer = Company.objects.filter(pk__in=Subquery(inner.values('pk')))
|
||||||
self.assertFalse(outer.exists())
|
self.assertFalse(outer.exists())
|
||||||
|
|
||||||
|
def test_subquery_filter_by_aggregate(self):
|
||||||
|
Number.objects.create(integer=1000, float=1.2)
|
||||||
|
Employee.objects.create(salary=1000)
|
||||||
|
qs = Number.objects.annotate(
|
||||||
|
min_valuable_count=Subquery(
|
||||||
|
Employee.objects.filter(
|
||||||
|
salary=OuterRef('integer'),
|
||||||
|
).annotate(cnt=Count('salary')).filter(cnt__gt=0).values('cnt')[:1]
|
||||||
|
),
|
||||||
|
)
|
||||||
|
self.assertEqual(qs.get().float, 1.2)
|
||||||
|
|
||||||
def test_explicit_output_field(self):
|
def test_explicit_output_field(self):
|
||||||
class FuncA(Func):
|
class FuncA(Func):
|
||||||
output_field = models.CharField()
|
output_field = models.CharField()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user