Aggregation breaks QuerySet.count() with empty results
When calling count()
after performing an __in=[]
filter, a TypeError is thrown (see example). This is because BaseQuery.get_aggregation is attempting to zip query.execute_sql(SINGLE)
(line 301), which can evaluate to None in Line 1933:
# Works, even if the filter returns no results.
User.objects.filter(id__in=[1,2,3]).count()
User.objects.filter(id__in=[99,100,101]).count()
# Breaks: Filtering with an empty list and then calling `count()` throws an error.
User.objects.filter(id__in=[]).count()
I'm not sure how to fix this problem. I'm assuming that a return value of None
is the intended behavior of execute_sql
in this case, and that get_aggregation
should be make more robust to handle a result of None.
First naive approach