3 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
帶有 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貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
首先,我建議訪問這個(gè)以查看基于類的視圖的基礎(chǔ)結(jié)構(gòu)。
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貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
您的問題是您在類中創(chuàng)建了一個(gè)隨機(jī)函數(shù),該函數(shù)不會(huì)覆蓋任何內(nèi)容。您要做的是覆蓋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
添加回答
舉報(bào)