Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Join simple con Django

Estas en el tema de Join simple con Django en el foro de Python en Foros del Web. Buenas tardes a todos, estoy siguiendo el tutorial que hay en la web de django y me surge una duda al hacer la siguiente query ...
  #1 (permalink)  
Antiguo 03/09/2013, 07:44
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 14 años, 6 meses
Puntos: 4
Join simple con Django

Buenas tardes a todos, estoy siguiendo el tutorial que hay en la web de django y me surge una duda al hacer la siguiente query con QuerySets:

select *
from poll p,
choice c
where p.id = c.poll_id

Con la siguiente linea de código:

Poll.objects.filter(id__in = Choice.objects.values_list('poll_id'))

consigo los resultados deseados, pero acostumbrado a SQL me parece poco eficiente ¿Hay alguna otra forma mejor de obtener resultados?

Edito:
Antes lo digo, antes encuentro una posible solución:

Poll.objects.filter(choice__id__isnull = False).distinct()

Sigo sin saber si es lo más óptimo, pero desde luego parece mejor que mi primera opción.

Última edición por ellgon; 03/09/2013 a las 07:49 Razón: Posible solución
  #2 (permalink)  
Antiguo 03/09/2013, 18:00
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: Join simple con Django

Incluso el query que tienes en SQL es ineficiente.

Algo eficiente sería usar joins de verdad.
Código SQL:
Ver original
  1. SELECT *
  2. FROM poll p
  3. INNER JOIN
  4. choice c
  5. ON p.id = c.poll_id

En django es un poco diferente porque lo haces es querer acceder instancias.

Código Python:
Ver original
  1. poll_list = Poll.objects.select_related().all()
  2. for poll in poll_list:
  3.     choice_list = poll.choice_set.all()
  4.     for choice in choice_list:
  5.         ...
  #3 (permalink)  
Antiguo 04/09/2013, 01:15
 
Fecha de Ingreso: octubre-2009
Mensajes: 29
Antigüedad: 14 años, 6 meses
Puntos: 4
Respuesta: Join simple con Django

Muchas gracias por la respuesta.

Etiquetas: django, query
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 00:53.