Django_filters给出错误“ QuizFilter没有len()”

问题描述 投票:1回答:1

我有一个过滤器:

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

打开页面时出现此错误:

enter image description here

在模板中,我只写{%for quizzes.qs%}中的测验,而过滤则使用{{quizzes.form.as_p}}我该如何解决这个问题?

django django-filter django-filters
1个回答
0
投票
您在这里返回QuizFilter,而不是其过滤后的查询集。您需要返回.qsQuizFilter属性:

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

如果还需要访问过滤器,则最好使用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( filter=QuizFilter(self.request.GET, queryset=self.model.objects.all()) ) return context

因此,您可以使用{{ filter.form.as_p }}渲染滤镜。
© www.soinside.com 2019 - 2024. All rights reserved.