如何清除Django会话中的条目

时间:2014-05-11 08:36:43

标签: django django-forms django-views django-sessions

我有一个搜索表单,然后我用它来列出带有分页ListView的对象。为了使分页工作,我需要将表单字段保留在列表视图中,到目前为止我使用session进行了操作。在表单的视图中,我想清除潜在的先前搜索的值。所以我有这样的事情:

    class SearchForm( forms.Form ):
      name = forms.CharField()

    def SearchView( request ):
        form = SearchForm() 
        <CLEAR SESSION ENTRY HERE>
        return render( request, 'search.html', {
            'form': form,
        } )



    class listView( ListView ):
      model = myModel
      template_name = "list.html"
      paginate_by = 10
      form = None


      def get( self, request, *args, **kwargs ):
          form = SearchForm( request.GET )  # A form bound to the POST data

        if form.is_valid():

          name = form.cleaned_data['name']
          if name:
            self.request.session.setdefault( 'search_form', {} )['name'] = name

        return super( orderList_view, self ).get( request, *args, **kwargs )

      def get_queryset( self ):
        searchFilters = self.request.session.get( 'search_form', {} )
        queryset = myModel.objects.all()
        if 'name' in  searchFilters:
          queryset = queryset.filter( mymodel__name__iexact = searchFilters.get( 'name' ) )
        return queryset

我的问题是清除条目。 如果我这样做

    request.session.pop( 'search_form', None )

一切都很完美。

但是,如果我这样做的话

    request.session['search_form'] = dict()

当我进入下一页时,会话似乎已被清除。第一页仅包含与我的搜索匹配的条目,并且页面总数是正确的。但是当我点击&#34; next&#34;时,它会返回所有条目,searchFilters为空。

我不明白为什么,因为做session.setdefault(&#39; search_form&#39;,{})应该使两个清算方法相同。可以有人解释为什么一个工作而不是另一个,为什么我的会议&#34;清除&#34;在第二种情况下?

顺便说一句,我在会话中使用了一个字典search_form,因为实际上我有几个搜索字段,而且它有更清洁的&#34;让他们在一起

0 个答案:

没有答案