[pyar] Query extraña Django

xavier lesa xavierlesa en gmail.com
Mie Sep 7 11:27:14 ART 2011


Si esto no te funciona:
VarianteAtributos.objects.filter(Q(atributo__valor="Metal"),
Q(atributo__valor="Rojo")
| Q(atributo__valor="1mm"))

Proba sacando la primer Q, o sea
VarianteAtributos.objects.filter(atributo__valor="Metal",
Q(atributo__valor="Rojo")
| Q(atributo__valor="1mm"))

Internamente django usa las Q para hacer querys mas complejos que un simple
AND y cuando vos usas la API con campo = valor
siempre haces un AND, y usando las Q "encapsula" (no se me ocurre otra
palabra) parte del query para usarlo de otra manera con ANDs y/o ORs.

Te recomiendo que lo veas desde la shell así, para notar con mas detalles
esto que te comento:

qs = VarianteAtributos.objects.filter(Q(atributo__valor="Metal"),
Q(atributo__valor="Rojo")
| Q(atributo__valor="1mm"))
print qs.query

qs = VarianteAtributos.objects.filter(atributo__valor="Metal",
Q(atributo__valor="Rojo")
| Q(atributo__valor="1mm"))
print qs.query

espero haber sido de ayuda,

Slds



Xavier Lesa
Production Manager

tel: +011 6379-6434 | cel: +011 15 3868-3918

web: http://link-b.com | mail: xavier en link-b.com | xavierlesa en gmail.com
gtalk: xavier en link-b.com | skype: xavierlesa



2011/9/7 matias benedetto <matias.benedetto en gmail.com>

>
> VarianteAtributos.objects.filter(atributo__valor="Rojo") &
> VarianteAtributos.objects.filter(atributo__valor="1mm") &
> VarianteAtributos.objects.filter(atributo__valor="Metal")
>
> Esto funciono excelente, me devuelve la variante que estaba buscando
>
>
> Sin embargo el ejemplo con las Q, me devuelve una lista vacia
> VarianteAtributos.objects.filter(Q(atributo__valor="Metal"),
> Q(atributo__valor="Rojo") | Q(atributo__valor="1mm"))
> Por que puede pasar esto?
>
> si escribo por ejemplo
> VarianteAtributos.objects.filter(Q(atributo__valor="Rojo"))
> me devuelve algunas VarienteAtributos, por cuando le pongo una coma o un &
> ya no me devuelve nada
> VarianteAtributos.objects.filter(Q(atributo__valor="Rojo") & Q(atributo__valor="Metal")
> )
>
> El tema es que lo quiero hacer con las Q porque vi varios ejemplo para
> crear consultas dinamicamente con Q y no parece complicado.
> Cual es la diferencia entre las dos consultas?
> Por que una me devuelve algo y la otra nada?
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20110907/03ed86bb/attachment.html>


More information about the pyar mailing list