データテーブルにデータをロードするために、次のコードでDjango-Tables2を使用しています。DataTable2と一緒に大きなテーブルでDjango-Filterを使用する
sales_data = SalesTable(sale.objects.all().order_by('-time'))
RequestConfig(request,paginate={'per_page': 50}).configure(sales_data)
私の販売テーブルには、140万行を持っており、まだ、上のRequestConfig(django_tables2.Table)の上記の方法は、非常に高速なページネーションと
は今、私は上の列のフィルタリングを持ちたいなどですテーブルとそれを使用してdjangoフィルタを使用します。時間がかかり過ぎ、メモリ全体を消費しています。方法はありますか?通常のテーブル読み込みと同じ速度でフィルタリングできますか?
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
ありがとうございます!
は、なぜあなたはDjangoのフィルタを使用する必要がありますか?組み込みのフィルタで何が問題になっていますか? – e4c5
Django-Filterのクエリセットは、フィルタフォームに基づいて動的列フィルタリング自体を定義しており、すべてのフィールドタイプについてすべてを再作成する必要はありません。 –
あなたはより良い理由がありますか? – e4c5