[Python-es] Busqueda compleja en BD

César H. Roldán croldan en gmail.com
Jue Jun 28 17:12:49 CEST 2012


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/
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120628/cb009c33/attachment.html>


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