Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

django-filter and aggregate functions

This is an app specific question: django-filter, here is a brief explanation for those who have not used it.

f = ProductFilter(request.GET, queryset=Product.objects.all())

This line does all the filtering for us. ProductFilter is a class, we have specified with filters (forms-alike class). f is a filter object (basically items we have asked for), which acts similar to a list.

Now, I'd like to perform aggregate functions (like Avg for instance) on this f object. Do you have any ideas how/if this could be accomplished?

like image 693
nutship Avatar asked Nov 30 '25 09:11

nutship


1 Answers

You mean something like this:

from django.db.models import Avg


class ProductFilter(django_filters.FilterSet):
    ...

    @property
    def avg(self):
        qs = super(ProductFilter, self).qs

        return qs.aggregate(Avg('price'))['id__avg']

So you're adding your own filter property and use it like this in your template:

{{ filter.avg }}
like image 75
mariodev Avatar answered Dec 02 '25 22:12

mariodev