【问题标题】:Django- filtering of the filter objectDjango-过滤器对象的过滤
【发布时间】:2018-08-05 00:40:40
【问题描述】:

我想使用 FilterSets 在页面上进行复杂的过滤。这是我的Filterset,很好地向我展示了所选时间和所选参数的元组。

# filters.py

class workFilter(filters.FilterSet):
    start__gt = filters.DateTimeFilter(name='time_start', lookup_expr='gte')
    start__lt = filters.DateTimeFilter(name='time_end', lookup_expr='lte')

    class Meta:
        model = Work
        fields = ('machine', 'program')

但我想添加解释查询数据的图表。为此,我需要信息,例如总时间。我是这样查询他们的:

#views.py

def search(request):
    work_list = Work.objects.all()
    work_filter = workFilter(request.GET, queryset=work_list)
    filter_backends = (filters.DjangoFilterBackend,)

    #some queries to add to context, such as
    sum_work = Work.objects.aggregate(Sum('time'))['time__sum']

    return render_to_response(
        TEMPLATE_DIRS + 'index.html',
        {
            'filter': praca_filter,
            'sum_work': sum_work,
        }
    )

但遗憾的是,这些查询是根据整个数据库,而不是我过滤的对象集。

如何查询过滤集work_filter

【问题讨论】:

    标签: django django-queryset django-filter


    【解决方案1】:

    sum_work 定义为FilterSet 的属性。

    class WorkFilter(filters.FilterSet):
        start__gt = filters.DateTimeFilter(name='time_start', lookup_expr='gte')
        start__lt = filters.DateTimeFilter(name='time_end', lookup_expr='lte')
    
        class Meta:
            model = Work
            fields = ('machine', 'program')
    
        @property
        def work_sum(self):
            qs = super(WorkFilter, self).qs
    
            return qs.aggregate(Sum('time'))['time__sum']
    

    然后,当您将过滤器传递给您的视图时,您只需要在模板中添加{{ filter.work_sum }}

    【讨论】:

    • 谢谢先生!你救了我的命。
    猜你喜欢
    • 2019-12-27
    • 2017-01-07
    • 2013-03-16
    • 2014-02-10
    • 2014-05-31
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多