J.A*_*noz 7 python django listview django-filter django-class-based-views
当我想对使用 django_filter 创建的过滤器进行分页时,我遇到了问题,在我的模板中,它向我显示了查询集和过滤器,但分页不起作用,我想知道为什么会发生这种情况以及您是否可以帮助我。
我将插入我的代码片段,以便您可以看到。
这是我的观点.py
PD:我有所有必需的进口品。
@method_decorator(staff_member_required, name='dispatch')
class EmployeeListView(ListView):
model = Employee
paginate_by = 4
def dispatch(self, request, *args, **kwargs):
if not request.user.has_perm('employee.view_employee'):
return redirect(reverse_lazy('home'))
return super(EmployeeListView, self).dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['filter'] = EmployeeFilter(self.request.GET, queryset = self.get_queryset())
return context
Run Code Online (Sandbox Code Playgroud)
过滤器.py
import django_filters
from .models import Employee, Accident
class EmployeeFilter(django_filters.FilterSet):
class Meta:
model = Employee
fields = {
'rutEmployee' : ['startswith']
}
Run Code Online (Sandbox Code Playgroud)
您应该覆盖get_queryset
。这意味着您必须get_queryset
像这样放置过滤器:
@method_decorator(staff_member_required, name='dispatch')
class EmployeeListView(ListView):
model = Employee
paginate_by = 4
def dispatch(self, request, *args, **kwargs):
if not request.user.has_perm('employee.view_employee'):
return redirect(reverse_lazy('home'))
return super(EmployeeListView, self).dispatch(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['filter'] = EmployeeFilter(self.request.GET, queryset = self.get_queryset())
return context
def get_queryset(self):
queryset = super().get_queryset()
return EmployeeFilter(self.request.GET, queryset=queryset).qs
Run Code Online (Sandbox Code Playgroud)
并在employee_list.html中使用object_list
而不是像filter
这样:
{% for employee in object_list|dictsort:"id" reversed %}
Run Code Online (Sandbox Code Playgroud)