Make filters in admin be sticky, according to:
authorMagnus Hagander <magnus@hagander.net>
Wed, 30 Jan 2013 10:41:14 +0000 (11:41 +0100)
committerMagnus Hagander <magnus@hagander.net>
Wed, 30 Jan 2013 10:41:14 +0000 (11:41 +0100)
http://code.djangoproject.com/ticket/3777

pgweb/util/middleware.py

index ab0523b871506740b56580f9c54e7795425206e2..a8be133f1f5c29761acfad85e18ae4b90cdfaf07 100644 (file)
@@ -42,7 +42,34 @@ class PgMiddleware(object):
 
                return None
 
-# Thread local store for username, see comment at the top of this file
        def process_request(self, request):
+# Thread local store for username, see comment at the top of this file
                _thread_locals.user = getattr(request, 'user', None)
 
+# Per django ticket #3777, make filters in admin be sticky
+               path = request.path
+               if path.find('/admin/') != -1:
+                       query_string = request.META['QUERY_STRING']
+                       if not request.META.has_key('HTTP_REFERER'):
+                               return None
+                       session = request.session
+                       if session.get('redirected', False):
+                               del session['redirected']
+                               return None
+                       referrer = request.META['HTTP_REFERER'].split('?')[0]
+                       referrer = referrer[referrer.find('/admin'):len(referrer)]
+                       key = 'key'+path.replace('/','_')
+                       if path == referrer:
+                               if query_string == '':
+                                       if session.get(key,False):
+                                               del session[key]
+                                       return None
+                               request.session[key] = query_string
+                       else:
+                               if session.get(key,False):
+                                       query_string=request.session.get(key)
+                                       redirect_to = path+'?'+query_string
+                                       request.session['redirected'] = True
+                                       return HttpResponseRedirect(redirect_to)
+                               else:
+                                       return None