请求get对象时django MultiValueDictKeyError

时间:2014-06-20 08:24:11

标签: django forms request

我已经制作了一个表单来过滤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_frompub_date_to。当我运行网站时,它说:
MultiValueDictKeyError

我不知道发生了什么事。当我删除获取pub_frompub_to的两行时,该网站正常运行。我希望这两个值过滤查询集。

任何帮助PLZ

1 个答案:

答案 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