我已经制作了一个表单来过滤ListView
class SingleNewsView(ListView):
model = News
form_class = SearchForm
template_name = "single_news.html"
def get(self, request, pk, **kwargs):
self.pk = pk
pub_from = request.GET['pub_date_from']
pub_to = request.GET['pub_date_to']
return super(SingleNewsView,self).get(request,pk, **kwargs)
我的表单字段为pub_date_from
和pub_date_to
。当我运行网站时,它说:
MultiValueDictKeyError
。
我不知道发生了什么事。当我删除获取pub_from
和pub_to
的两行时,该网站正常运行。我希望这两个值过滤查询集。
任何帮助PLZ
答案 0 :(得分:8)
在第一次请求时,没有提交表单数据,因此request.GET
将没有任何数据。所以做request.GET['pub_date_from']
会失败。您应使用.get()
方法
pub_from = request.GET.get('pub_date_from')
pub_to = request.GET.get('pub_date_to')
如果这些键不在dict中,则返回None
。因此,在代码中适当处理这些情况。
此外,如果您要过滤ListView
添加get_queryset()
方法的对象,请按照此处的说明返回已过滤的查询集Dynamic filtering