Django_filters выдает ошибку "QuizFilter не имеет len ()" - PullRequest
1 голос
/ 11 марта 2020

У меня есть один фильтр:

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

В шаблонах я просто пишу {% для викторины в quizzes.qs%}, а для фильтрации я использую {{quizzes.form.as_p}}
Как мне решить проблему?

1 Ответ

1 голос
/ 11 марта 2020

Вы здесь возвращаете QuizFilter, а не его отфильтрованный набор запросов. Вам необходимо вернуть атрибут .qs QuizFilter:

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 }}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...