这是我的观点
class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"
def get(self, request, pk, **kwargs):
self.pk = pk
self.pub_from = request.GET.get('pub_date_from',False)
self.pub_to = request.GET.get('pub_date_to',False)
self.crawlers = request.GET.get('crawler',False)
print self.crawlers
return super(SingleNewsView,self).get(request,pk, **kwargs)
def get_context_data(self, **kwargs):
context = super(SingleNewsView,self).get_context_data(**kwargs)
context["form"] = SearchForm#(self.request.GET)
context["something"] = News.objects.filter(category_id=self.pk).filter(published_date__range=(self.pub_from,self.pub_to), crawler=self.crawlers)
return context
当我进入页面时,由于未提供数据,因此不显示任何新闻。我希望最初显示所有新闻,当用户提交表单时,只需过滤工作。我怎么能这样做?
答案 0 :(得分:1)
您应该添加get_queryset()
方法,而不是在get_context_data()
中进行过滤。您可以按以下方式添加方法
def get_queryset(self):
qs = News.objects.filter(category_id=self.pk)
#you can change this to just support one of the pub_from or pub_to
if self.pub_from and self.pub_to :
qs = qs.filter(published_date__range=(self.pub_from,self.pub_to)
if self.crawler:
qs = qs.filter(crawler=self.crawlers)