#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.

Reply via email to