gpt4 book ai didi

python - 在大型表上使用 Django-Filter 以及 DataTables2

转载 作者:行者123 更新时间:2023-12-01 03:51:25 26 4
gpt4 key购买 nike

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

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

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

现在,我想在表上进行列过滤并使用 django-filter 进行相同的操作。它花费了太长的时间,消耗了整个内存。有没有办法,我可以像正常表格加载一样获得过滤速度?

views.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

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 = sales.tables.SaleFilteredTable
filter_class = sales.filters.SaleFilter

urls.py

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

filters.py

import django_filters

import sales.models

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

tables.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

提前致谢!

最佳答案

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

通过此修改,空过滤器和过滤器表单查询集都将加载 LIMIT 查询。

views.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

关于python - 在大型表上使用 Django-Filter 以及 DataTables2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com