django-filter和聚合函数

nut*_*hip 3 python django aggregate filter

这是一个应用程序特定的问题:django-filter,这里是对没有使用它的人的简要说明.

f = ProductFilter(request.GET, queryset=Product.objects.all())
Run Code Online (Sandbox Code Playgroud)

这条线为我们完成了所有过滤.ProductFilter是一个类,我们已经指定了过滤器(类似于表单的类).f是一个过滤器对象(基本上是我们要求的项目),其行为类似于列表.

现在,我想在这个对象上执行aggregate函数(Avg例如)f.您是否有任何想法如何实现?

mar*_*dev 5

你的意思是这样的:

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']
Run Code Online (Sandbox Code Playgroud)

因此,您要添加自己的过滤器属性,并在模板中使用它:

{{ filter.avg }}
Run Code Online (Sandbox Code Playgroud)