Foros del Web » Programando para Internet » Python »

Como realizar consulta con varios parámetros?

Estas en el tema de Como realizar consulta con varios parámetros? en el foro de Python en Foros del Web. Hola, Debo realizar una consulta o una opción de búsqueda por varios parámetros y no lo puedo hacer. Esta es las lineas de código que ...
  #1 (permalink)  
Antiguo 14/07/2014, 16:13
 
Fecha de Ingreso: febrero-2014
Mensajes: 7
Antigüedad: 10 años, 2 meses
Puntos: 0
Pregunta Como realizar consulta con varios parámetros?

Hola, Debo realizar una consulta o una opción de búsqueda por varios parámetros y no lo puedo hacer.


Esta es las lineas de código que había utilizado para que en una sola opción me permite buscar por Nombre, Apellido y Nro de CI. Pero me solicitan buscar por separado:
Nombre: *****
Apellido: ******
NCI: ****** que seria el numero de documento.

Código Python:
Ver original
  1. @login_required
  2. def BuscarPersona(solicitud):
  3.     if 'consulta' not in solicitud.GET:
  4.         return ListView.as_view(queryset = DatosPersonalesBasicos.objects.none(), template_name = "paciente_buscar.html")(solicitud)
  5.     orden = solicitud.GET.get('orden', 'tipo')
  6.     orden = orden if orden in ['Nombre', 'Apellido'] else 'tipo'
  7.     consulta = solicitud.GET["consulta"]
  8.     consulta = Q(Nombre__icontains = consulta)| Q(Apellido__icontains = consulta) | Q(Cedula__icontains = consulta)
  9.     qs =  DatosPersonalesBasicos.objects.filter(datosagresor = None).filter(consulta)
  10.     if orden == 'tipo':
  11.         qs = list(combinar(qs.exclude(datosinfantiles = None), qs.exclude(datosdepacienteadolescente = None), qs.exclude(datosdepacienteadulto = None)))
  12.     else:
  13.         qs = qs.order_by(orden)
  14.     return BuscarPersonaResultados.as_view(extra={"consulta": solicitud.GET["consulta"], 'orden': orden}, queryset = qs, template_name = "paciente_buscar.html", paginate_by = 30)(solicitud)

Última edición por razpeitia; 14/07/2014 a las 16:36
  #2 (permalink)  
Antiguo 14/07/2014, 16:57
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Como realizar consulta con varios parámetros?

Me voy a ahorrar todos los comentarios que tengo con respecto a ese código y solo te diré 2 cosas:

Primero: ¿Como obtener una lista de valores por GET?
Código Python:
Ver original
  1. request.GET.getlist

Segundo: ¿Como enviar una lista de valores en HTML?
Código HTML:
Ver original
  1. <form method="GET">
  2. <input type="number" name="numbers[]"/>
  3. <input type="number" name="numbers[]"/>
  4. <input type="number" name="numbers[]"/>
  5. <input type="number" name="numbers[]"/>
  6. <input type="submit" value="add"/>
  7. </form>
  #3 (permalink)  
Antiguo 14/07/2014, 17:13
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Como realizar consulta con varios parámetros?

Espero que ese código no se encuentre en producción, no quiero ofender pero está bastante mal:

No mezcles vistas basadas en funciones (FBV) con vistas basadas en clases (CBV), elige una u otra, nunca las dos al mismo tiempo para una sola vista.

Y luego, haces esto:

Código Python:
Ver original
  1. list(combinar(qs.exclude(datosinfantiles = None), qs.exclude(datosdepacienteadolescente = None), qs.exclude(datosdepacienteadulto = None)))

No tengo idea de que hace tu función combinar, pero creo que lo que quieres es algo como:

Código Python:
Ver original
  1. qs.exclude(datosinfantiles=None, datosdepacienteadolescente=None, datosdepacienteadulto=None)
.

Si algún día vez la cantidad y calidad de queries que se generan actualmente vas a ver que está mal.

Saldos
__________________
Grupo Telegram Docker en Español

Etiquetas: ip, login, son
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:10.