#3777: Persistent change_list filtering in admin ----------------------------------------------------+----------------------- Reporter: matt <matt.ba...@dotwell.org> | Owner: nobody Status: closed | Milestone: Component: django.contrib.admin | Version: SVN Resolution: worksforme | Keywords: filter session Stage: Unreviewed | Has_patch: 1 Needs_docs: 1 | Needs_tests: 0 Needs_better_patch: 0 | ----------------------------------------------------+----------------------- Comment (by drho...@gmail.com):
I modified the above middleware so that is doesn't break admin's related object popups. This method tracks popup query strings separately from regular pages. This way you can use filters inside the popup windows as well. Hope it helps someone else. {{{ from django import http # based on http://code.djangoproject.com/ticket/3777#comment:4 class FilterPersistMiddleware(object): def process_request(self, request): if '/admin/' not in request.path: return None if not request.META.has_key('HTTP_REFERER'): return None popup = 'pop=1' in request.META['QUERY_STRING'] path = request.path query_string = request.META['QUERY_STRING'] session = request.session if session.get('redirected', False):#so that we dont loop once redirected del session['redirected'] return None referrer = request.META['HTTP_REFERER'].split('?')[0] referrer = referrer[referrer.find('/admin'):len(referrer)] key = 'key'+path.replace('/','_') if popup: key = 'popup'+path.replace('/','_') if path == referrer: #We are in same page as before if query_string == '': #Filter is empty, delete it if session.get(key,False): del session[key] return None request.session[key] = query_string else: #We are are coming from another page, restore filter if available if session.get(key, False): query_string=request.session.get(key) redirect_to = path+'?'+query_string request.session['redirected'] = True return http.HttpResponseRedirect(redirect_to) return None }}} -- Ticket URL: <http://code.djangoproject.com/ticket/3777#comment:5> Django <http://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-upda...@googlegroups.com. To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-updates?hl=en.