2010-08-16 25 views
6

quiero pasar una variable por URL a otra página en django admin. parece que no está funcionando, quiero pasar la variable "/? Name = hello", y atraparla por request.GET.get ["name", ""]. Pero la url se convierte en "/? E = 1 "después de que pasó". si uso el parámetro predeterminado'q ', funciona, pero tendrá un conflicto. parece que este problema es solo django-admin. y necesito pasarlo por url no publica ... ¿Alguien sabe cómo solucionar este problemaDjango admin: pase la variable por URL

gracias

+1

no tiene sentido, 'request.GET.get [ "nombre", ""]' 'causaría TypeError'. –

Respuesta

1

Puede explicar su problema un poco más .... ¿por qué quiere pasar una variable para django administrador ... también usted no puede coger obtener la variable así ... de cualquier uso:

request.GET['name'] 

o

request.GET.get('name','') 

.get es un método instancia, no un diccionario.

+0

lo usé request.GET.get ('name', ''). quiero pasar la variable al administrador para que diga, que informes aparecerán. q = 0 para mostrar los informes enviados. q = 1 para mostrar los rpoets asignados y etc. – Grey

+0

solo puedo hacerlo mediante el parámetro de uso q. que q es utilizado por la búsqueda archivada. estuvo bien. pero ahora necesito usar el campo de búsqueda. y q se usará para eso. entonces necesito arreglarlo realmente – Grey

+0

puede pensar por qué no pienso POST. ese es el motivo, si hay más informes que una página puede mostrar. djang admin use p = 1, p = 2 para usar varias páginas para mostrar todos los informes. pero si no uso GET perderá la pista – Grey

9

El problema es que la búsqueda name no existe cuando el get_query_set intenta resolverlo como un campo de modelo. Por lo tanto, se genera una excepción IncorrectLookupParameters() que a su vez redirige a la url "e = 1" no muy útil. Este problema se resuelve en Django 1.4 con la introducción de especificaciones de filtros personalizadas. Hasta entonces, una solución posible es sobrescribir dinámicamente la clase ChangeList devuelta por su método ModelAdminsget_changelist().

Esta solución funciona en Django 1.3:

class MyModelAdmin(ModelAdmin): 

    def get_changelist(self, request, **kwargs): 
     changelist_class = super(MyModelAdmin, self).get_changelist(request, 
                   **kwargs) 

     class CustomChangeList(changelist_class): 
      def __init__(self, request, *args, **kwargs): 
       self._name = request.GET.get('name') 
       super(CustomChangeList, self).__init__(request, *args, **kwargs) 

      def get_query_set(self, *args, **kwargs): 
       if self._name: 
        del self.params['name'] 

       qs = super(CustomChangeList, self).get_query_set(*args, **kwargs) 

       if self._name: 
        return qs.filter([FILTER WHAT YOU WANT HERE...]) 

       return qs 


     return CustomChangeList