class SubqueryCount(Subquery): # Custom Count function to just perform simple count on any queryset without grouping. # https://stackoverflow.com/a/47371514/1164966 template = "(SELECT count(*) FROM (%(subquery)s) _count)" output_field = PositiveIntegerField() class SubqueryAggregate(Subquery): # https://code.djangoproject.com/ticket/10060 template = '(SELECT %(function)s(_agg."%(column)s") FROM (%(subquery)s) _agg)' def __init__(self, queryset, column, output_field=None, **extra): if not output_field: # infer output_field from field type output_field = queryset.model._meta.get_field(column) super().__init__(queryset, output_field, column=column, function=self.function, **extra) class SubquerySum(SubqueryAggregate): function = 'SUM'