如何在django-tables2中使用django-filter

时间:2013-09-24 14:18:34

标签: django django-filter django-tables2

我正在尝试在django-tables 2中添加过滤功能,因此我选择django-filter。我按照它工作得很好的文档,但我不知道如何将它与django-tables 2集成。 我做了一个过滤器类,在视图中我做了这样的事情:

queryset = Fitzroyfalls.objects.select_related().all()
f = FitzroyfallsFilter(request.GET, queryset=queryset)
table = FitsroyFallsTable(f.queryset)
table.paginate(page=request.GET.get('page', 1), per_page=25)
RequestConfig(request).configure(table)
return render(request, 'query.html', {'table': table})

但没有任何反应,它只显示包含所有数据的表格。

4 个答案:

答案 0 :(得分:3)

我检查了__iter__的{​​{1}}方法,它基本上访问了FilterSet property。所以@ huiming的答案对我有用。我按如下方式调整了您的代码:

qs

我正在使用:

queryset = Fitzroyfalls.objects.select_related().all()
f = FitzroyfallsFilter(request.GET, queryset=queryset)
table = FitsroyFallsTable(f.qs)
RequestConfig(request, paginate={"per_page": 25, "page": 1}).configure(table)
return render(request, 'query.html', {'table': table, 'filter': f})

答案 1 :(得分:1)

经过几个小时的尝试,我得到了简单的解决方案。 在视图中添加以下行:

if request.method == "GET"
    list1=list()
    for obj in f:
        list1.append(obj)
    table=FitsroyFallsTable(list1)

aaand就是这样!

答案 2 :(得分:0)

table = FitsroyFallsTable(f.qs)

答案 3 :(得分:0)

CBV

class FilteredSingleTableView(FilterView, SingleTableView):

    def get_table_data(self):
        data = super(FilteredSingleTableView, self).get_table_data()
        return data if self.object_list is None else self.object_list

用法:

class UserList(FilteredSingleTableView):
    template_name = 'accounts/users_list.html'
    model = User
    table_class = UserTable
    paginate_by = 10
    filterset_class = UserFilter