3 回答

TA贡献1836条经验 获得超3个赞
带有 get_queryset 方法的 ListView
class SearchListView(ListView):
model = Post
template_name = "public/search.html"
def get_queryset(self):
queryset = super().get_queryset().filter(live=True)
query = self.request.GET.get("q")
if query:
queryset = queryset.filter(title__icontains=query)
return queryset
def get_context_data(self, **kwargs):
context = super(SearchListView, self).get_context_data(**kwargs)
context['queryset'] = self.get_queryset()
context['category'] = Category.objects.all()
return context

TA贡献1883条经验 获得超3个赞
首先,我建议访问这个以查看基于类的视图的基础结构。
class SearchListView(ListView):
model = Post
template_name = "public/search.html"
success_url ='where you want to redirect'
def get_queryset(self): # method that returns the queryset is `get_queryset`
query = self.request.GET.get("q")
if query:
queryset = self.model.objects.filter(title__icontains=query) # double underscore not single
return queryset
def get_context_data(self, **kwargs):
context = super(SearchListView, self).get_context_data(**kwargs)
context['queryset'] = self.get_queryset()
context['category'] = Category.objects.all()
return context

TA贡献1777条经验 获得超3个赞
您的问题是您在类中创建了一个随机函数,该函数不会覆盖任何内容。您要做的是覆盖get_queryset()。
class SearchListView(ListView):
model = Post
template_name = "public/search.html"
def get_context_data(self, **kwargs):
context = super(SearchListView, self).get_context_data(**kwargs)
context['queryset'] = self.get_queryset()
context['category'] = Category.objects.all()
return context
def get_queryset(self):
queryset = super().get_queryset().filter(live=True)
query = self.request.GET.get("q")
if query:
queryset = queryset.filter(title__icontains=query)
return queryset
添加回答
举报