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 ModelAdmins
get_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
no tiene sentido, 'request.GET.get [ "nombre", ""]' 'causaría TypeError'. –