2009-12-29 16 views
5

Primero, miré este question, pero tiene más de un año de antigüedad. Seguramente ahora hay una buena manera en Django 1.1.1 para llevar adelante la selección del filtro después de que el usuario haga clic en el botón Guardar en el Administrador.Cómo conservar la selección del filtro después de guardar en Django Admin

En una tabla con miles de registros, el filtrado es esencial. Y si un usuario hace varias elecciones de filtro, ese esfuerzo no debería tener que repetirse.

Respuesta

8

La respuesta es siempre la misma: de fábrica, Django no es compatible con este comportamiento. Hay un par de tickets en el rastreador de problemas con parches: #3777, #6903. La clase de middleware en this comment funciona sin modificar el código de Django.

+0

Me gusta la solución de middleware. ¡Gracias! –

+0

Buen hallazgo ... desearía poder votar más de una vez :) –

+0

Genial, ¡soluciona un GRAN problema para mis usuarios! Ese parche ha estado ahí por 6 años ... – Roger

0

otra forma es utilizar este fragmento http://djangosnippets.org/snippets/2531/

Class Modeladmin_perso(admin.ModelAdmin): 
def add_view(self, request, *args, **kwargs): 
    result = super(Modeladmin_perso, self).add_view(request, *args, **kwargs) 

    # Look at the referer for a query string '^.*\?.*$' 
    ref = request.META.get('HTTP_REFERER', '') 
    if ref.find('?') != -1: 
     # We've got a query string, set the session value 
     request.session['filtered'] = ref 

    if request.POST.has_key('_save'): 
     """ 
     We only kick into action if we've saved and if 
     there is a session key of 'filtered', then we 
     delete the key. 
     """ 
     try: 
      if request.session['filtered'] is not None: 
       result['Location'] = request.session['filtered'] 
       request.session['filtered'] = None 
     except: 
      pass 
    return result 
""" 
Used to redirect users back to their filtered list of locations if there were any 
""" 
def change_view(self, request, object_id, extra_context={}): 
    """ 
    save the referer of the page to return to the filtered 
    change_list after saving the page 
    """ 
    result = super(Modeladmin_perso, self).change_view(request, object_id, extra_context) 

    # Look at the referer for a query string '^.*\?.*$' 
    ref = request.META.get('HTTP_REFERER', '') 
    if ref.find('?') != -1: 
     # We've got a query string, set the session value 
     request.session['filtered'] = ref 

    if request.POST.has_key('_save'): 
     """ 
     We only kick into action if we've saved and if 
     there is a session key of 'filtered', then we 
     delete the key. 
     """ 
     try: 
      if request.session['filtered'] is not None: 
       result['Location'] = request.session['filtered'] 
       request.session['filtered'] = None 
     except: 
      pass 
    return result 

Lo bueno es que usted no tiene que cortar nada.

0

Esta característica ha sido una solicitud para el proyecto Django durante mucho tiempo (el ticket se abrió hace 5 años).

Afortunadamente este comportamiento molesto fue fixed en el maletero. Espere que esté incluido en Django 1.6.

3

Esta característica se ha agregado a Django como parte de la versión 1.6 y ahora está habilitada de forma predeterminada. Se describe en la release notes:

ModelAdmin ahora conserva filtros en la vista de lista después de crear, de editar o borrar un objeto. Es posible restablecer el comportamiento anterior de de los filtros de compensación estableciendo el atributo preserve_filters en False.

Cuestiones relacionadas