mirror of
https://github.com/django/django.git
synced 2025-08-04 02:48:35 +00:00
Fixed #27849 -- Added filtering support to aggregates.
This commit is contained in:
parent
489421b015
commit
b78d100fa6
13 changed files with 290 additions and 55 deletions
|
@ -5,7 +5,7 @@ from copy import deepcopy
|
|||
|
||||
from django.core.exceptions import FieldError
|
||||
from django.db import DatabaseError, connection, models, transaction
|
||||
from django.db.models import CharField, TimeField, UUIDField
|
||||
from django.db.models import CharField, Q, TimeField, UUIDField
|
||||
from django.db.models.aggregates import (
|
||||
Avg, Count, Max, Min, StdDev, Sum, Variance,
|
||||
)
|
||||
|
@ -1369,3 +1369,16 @@ class ReprTests(TestCase):
|
|||
self.assertEqual(repr(StdDev('a')), "StdDev(F(a), sample=False)")
|
||||
self.assertEqual(repr(Sum('a')), "Sum(F(a))")
|
||||
self.assertEqual(repr(Variance('a', sample=True)), "Variance(F(a), sample=True)")
|
||||
|
||||
def test_filtered_aggregates(self):
|
||||
filter = Q(a=1)
|
||||
self.assertEqual(repr(Avg('a', filter=filter)), "Avg(F(a), filter=(AND: ('a', 1)))")
|
||||
self.assertEqual(repr(Count('a', filter=filter)), "Count(F(a), distinct=False, filter=(AND: ('a', 1)))")
|
||||
self.assertEqual(repr(Max('a', filter=filter)), "Max(F(a), filter=(AND: ('a', 1)))")
|
||||
self.assertEqual(repr(Min('a', filter=filter)), "Min(F(a), filter=(AND: ('a', 1)))")
|
||||
self.assertEqual(repr(StdDev('a', filter=filter)), "StdDev(F(a), filter=(AND: ('a', 1)), sample=False)")
|
||||
self.assertEqual(repr(Sum('a', filter=filter)), "Sum(F(a), filter=(AND: ('a', 1)))")
|
||||
self.assertEqual(
|
||||
repr(Variance('a', sample=True, filter=filter)),
|
||||
"Variance(F(a), filter=(AND: ('a', 1)), sample=True)"
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue