Django_filters报错"QuizFilter has no len()"

Django_filters gives an error "QuizFilter has no len()"

我有一个过滤器:

import django_filters

from .models import Quiz


class QuizFilter(django_filters.FilterSet):
    class Meta:
        model = Quiz
        fields = ['title', 'level']

class QuizList(ListView):
    """List of quizzes + pagination"""
    model = Quiz
    template_name = 'quizapp/home.html'
    context_object_name = 'quizzes'
    paginate_by = 15

    def get_queryset(self):
        qs = self.model.objects.all()
        filtered_quizzes = QuizFilter(self.request.GET, queryset=qs)
        return filtered_quizzes

当我打开页面时出现此错误:

在模板中我只写了 {% for quiz in quizzes.qs %} 和过滤我使用 {{ quizzes.form.as_p }}
我该如何解决这个问题?

你在这里 return QuizFilter,而不是它的过滤查询集。您需要 return QuizFilter.qs 属性:

class QuizList(ListView):
    """List of quizzes + pagination"""
    model = Quiz
    template_name = 'quizapp/home.html'
    context_object_name = 'quizzes'
    paginate_by = 15

    def get_queryset(self):
        qs = self.model.objects.all()
        filtered_quizzes = QuizFilter(self.request.GET, queryset=qs)
        return filtered_quizzes<b>.qs</b>

如果您还需要访问过滤器,最好使用 FilterView:

class QuizList(ListView):
    """List of quizzes + pagination"""
    model = Quiz
    template_name = 'quizapp/home.html'
    context_object_name = 'quizzes'
    paginate_by = 15

    def get_queryset(self):
        qs = self.model.objects.all()
        filtered_quizzes = QuizFilter(self.request.GET, queryset=qs)
        return filtered_quizzes.qs

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context.update(
            <b>filter=QuizFilter(self.request.GET, queryset=self.model.objects.all())</b>
        )
        return context

然后您可以使用 {{ filter.form.as_p }} 渲染滤镜。