[Python-es] Busqueda compleja en BD

gabriel fernandez gabofer82 en gmail.com
Jue Jun 28 17:16:40 CEST 2012


Bien, muchas gracias por la ayuda, tomaré los consejos dados e intentaré
probar lo que
me han propuesto.

Saludos!

El 28 de junio de 2012 12:12, César H. Roldán <croldan en gmail.com> escribió:

> Con el raw que te indicó Eduardo te debería servir, eso te mapea los
> objetos y te retorna un queryset.
>
> Ahora, lo mejor, me parece es que en lugar de dar opciones con radio,
> pongas checkbox, eso te puede retornar una lista de valores para un campo,
> y con eso simplemente haces un for y vas armando objetos Q, los cuales los
> unís con | (or)
>
> q = None
> for op in opciones:
>   if q is None:
>     q = Q(Modelo__contains=op)
>   else:
>     q = q | Q(Modelo__contains=op)
>
> Saludo
>
> César
>
> El 28 de junio de 2012 12:01, gabriel fernandez<gabofer82 en gmail.com>escribió:
>
> Ok, pero yo quiero hacer un queryset, por eso uso Q, porque la consulta
>> evalua muchas opciones, no se si las formas son excluyentes, como seria
>> raw en una consulta con Q?
>>
>> El 28 de junio de 2012 11:51, Eduardo Matus <ematus en gmail.com> escribió:
>>
>> Tambien esta "raw"
>>>
>>> resultados = Modelo.objects.raw("select * from foo")
>>>
>>> lo que hace es que mapea las columnas a los campos del modelo, como si
>>> fuera objetos POCO.
>>>
>>>
>>> 2012/6/28 Manuel Ignacio Franco Galeano <maigfrga en gmail.com>
>>>
>>>> tambien esta la opcion de hacer con sql
>>>> https://docs.djangoproject.com/en/dev/topics/db/sql/
>>>>
>>>>
>>>>
>>>>  def my_custom_sql():
>>>>     from django.db import connection, transaction
>>>>     cursor = connection.cursor()
>>>>
>>>>     # Data modifying operation - commit required
>>>>     cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
>>>>     transaction.commit_unless_managed()
>>>>
>>>>     # Data retrieval operation - no commit required
>>>>     cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
>>>>     row = cursor.fetchone()
>>>>
>>>>     return row
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> El 28 de junio de 2012 16:39, Eduardo Matus <ematus en gmail.com>escribió:
>>>>
>>>> primero que nada, esto no es una "consulta compleja".
>>>>> if seleccion == 'todo':
>>>>>     qset = ( Q(Modelo__contains='opcion1') |
>>>>> Q(Modelo__contains='opcion2'))
>>>>>
>>>>> 2012/6/28 gabriel fernandez <gabofer82 en gmail.com>
>>>>>
>>>>>>  Hola Lista!!!
>>>>>>
>>>>>> Agradezco a quién me pueda dar una mano!
>>>>>>
>>>>>> El problema es como sigue:
>>>>>>
>>>>>> Tengo una busqueda en la cual uso tres radio button:
>>>>>>
>>>>>> Opcion 1      Opcion 2   Opcion 1-2(Ambas)
>>>>>>
>>>>>> En la vista cuando voy a procesar el formulario tengo algo asi (luego
>>>>>> de validar):
>>>>>>
>>>>>> seleccion = form.cleaned_data['opciones']
>>>>>> qset = (
>>>>>>            Q(Modelo__contains=seleccion)
>>>>>> )
>>>>>>
>>>>>> El problema consiste en como hacer cuando se selecciona la Opcion 1-2
>>>>>> ya que engloba
>>>>>> las dos opciones anteriores, hay algo que indique que quiero todo
>>>>>> algo tipo:
>>>>>>
>>>>>> qset = (
>>>>>>            Q(Modelo__contains='todo')
>>>>>> )
>>>>>>
>>>>>> Uso el modulo Q para consultas complejas porque en realidad tengo mas
>>>>>> de una seleccion
>>>>>> como la anterior. Muestro una solamente porque el resto son iguales,
>>>>>> y van tambien en la misma
>>>>>> tupla de qset.
>>>>>>
>>>>>> Espero ser claro.
>>>>>>
>>>>>> Quedo a la espera de sus opiniones y ayuda. Muchas gracias!
>>>>>> --
>>>>>> Gabriel Fernández
>>>>>> Desrrollador Web
>>>>>> www.openweb.com.uy
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Python-es mailing list
>>>>>> Python-es en python.org
>>>>>> http://mail.python.org/mailman/listinfo/python-es
>>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Eduardo Matus Coquelet
>>>>> Ingeniero Civil Informático y Telecomunicaciones.
>>>>> Celular: 77113825
>>>>>
>>>>> _______________________________________________
>>>>> Python-es mailing list
>>>>> Python-es en python.org
>>>>> http://mail.python.org/mailman/listinfo/python-es
>>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> http://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>>
>>> --
>>> Eduardo Matus Coquelet
>>> Ingeniero Civil Informático y Telecomunicaciones.
>>> Celular: 77113825
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> http://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>>
>> --
>> Gabriel Fernández
>> Desrrollador Web
>> www.openweb.com.uy
>>
>>
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
Gabriel Fernández
Desrrollador Web
www.openweb.com.uy
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120628/8fcc8d46/attachment.html>


Más información sobre la lista de distribución Python-es