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 }}
渲染滤镜。
我有一个过滤器:
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 }}
渲染滤镜。