我有一个搜索表单,然后我用它来列出带有分页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;让他们在一起