djangfilter在大型表和DataTables2上的使用

2024-09-28 23:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Django-Tables2和以下代码将数据加载到数据表中。在

sales_data = SalesTable(sale.objects.all().order_by('-time'))
RequestConfig(request,paginate={'per_page': 50}).configure(sales_data)

我的Sales表有140万行,但是上面的RequestConfig方法(django_tables2.table)在分页等方面非常快

现在,我想对表进行一个列过滤,并使用django过滤器。它花费了太长的时间,消耗了整个记忆。有没有办法,我可以像正常的表格加载一样快速过滤?在

视图.py

^{pr2}$

网址.py

url(r'^filtertest$', sales_views.SalesFilteredSingleTableView.as_view() , name='salesfilterview')

过滤器.py

import django_filters

import sales.models

class SaleFilter(django_filters.FilterSet):
    class Meta:
        model = sales.models.sale

表格.py

import django_tables2 as tables
from sales.models import sale

class SaleFilteredTable(tables.Table):
    class Meta:
        model = sale
        attrs = {"class": "paleblue"}
        per_page = 50

提前谢谢!在


Tags: djangopyimport过滤器datamodelsaspage
1条回答
网友
1楼 · 发布于 2024-09-28 23:25:43

在CBV中,不是过滤器,过滤器.qs必须通过。在前一种情况下,整个表都被加载到内存中,因此加载时间会更长,并且会发生浏览器崩溃。在

通过此修改,两个空的filter和filterform查询集都将与LIMIT query一起加载。在

视图.py

class FilteredSingleTableView(tables.SingleTableView):
filter_class = None

def get_table_data(self):
    queryset_data = super(FilteredSingleTableView, self).get_table_data()
    self.filter = self.filter_class(self.request.GET, queryset = queryset_data)
    return self.filter.qs

def get_context_data(self, **kwargs):
    context = super(FilteredSingleTableView, self).get_context_data(**kwargs)
    context['filter'] = self.filter
    return context 

class SalesFilteredSingleTableView(FilteredSingleTableView):
    model = sale
    table_class = SalesFilteredTable
    template_name = 'sales/sale_list.html'
    filter_class = sales.filters.SaleFilter

参考

https://github.com/carltongibson/django-filter/issues/442

相关问题 更多 >