2011-07-31 19 views
12

Duplicar posible:
A left outer reverse select_related in Django?¿Cómo seleccionar_related en la clave foránea inversa?

Un BlogPost tiene muchas Comment s. Quiero obtener una lista de BlogPost sy todos sus comentarios.

Por lo tanto, tengo

BlogPost.objects.filter(my_filter).select_related() 

Pero el ForeignKey está en la Comment, no el BlogPost, por lo que el select_related() no Prefetch cualquier comentario. ¿Hay alguna manera de hacer que esto funcione?

no puedo revertir la consulta (Comment.objects...) porque entonces los otros objetos que el select_related() lo hace ir a buscar no funcionarían. Necesito que funcione en ambos sentidos.

Respuesta

-1

¿Por qué no buscar a los comentarios y luego usar regroup etiqueta de plantilla para mostrarlos:

# Select all Comments with BlogPost data - one query 
comments = Comment.objects.select_related('blog_post').order_by('-blog_post').all() 

Luego, en la plantilla:

{% regroup comments by blog_post as posts %} 
{% for blog_post in posts %} 

    <p>Blog post {{ blog_post.title }}</p> 
    <ul> 
    {% for comment in blog_post.comments %} 
    ... 
    {% endfor %} 
    </ul> 
    </p> 
{% endfor %} 
+2

Creo que debido a mi último párrafo. 'BlogPost' tiene otras claves externas en las que' select_related' * does * funciona, y quiero que continúen trabajando en ellas. Al buscar los comentarios primero, solo está cambiando el problema. – mpen

+6

Otro problema con esta solución es que no recibirá publicaciones de blog sin comentarios – babonk

Cuestiones relacionadas