variable template tag registered one not must library ifequal examples django left-join django-queryset django-select-related

tag - import django template



¿Un reverso exterior izquierdo select_related en Django? (5)

A partir de Django 1.4 prefetch_related hace lo que quieres.

Parent.objects.prefetch_related(''child_set'')

Documentos de Django relacionados (!): https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related .

Imagina el siguiente modelo:

class Parent(Model): ... class Child(Model) father = ForeignKey(Parent) ...

Algunos padres tienen hijos, otros no (no son padres en el sentido real, es solo un nombre ficticio).

Me gustaría hacer la siguiente consulta: quiero enumerar a todos los padres , y si tienen hijos, traigan a los niños también . Eso sería el equivalente de una combinación externa izquierda a la tabla secundaria, es decir:

select * from app_parent left join app_child on child_father_id=parent_id

De esta manera, cuando invoco Parent.child_set en mi plantilla, no voy a acceder a la base de datos ni un millón de veces. ¿Hay una manera de hacer eso? Gracias



En este caso, creo que lo mejor es hacer una lista de los niños, luego obtener el padre de ellos, así:

children = Child.objects.filter(...).select_related(''parent'').order_by(''parent'')

Luego, en la plantilla, posiblemente utilice un regroup (tenga en cuenta el order_by anterior):

{% regroup children by parent as parents %} <ul> {% for parent in parents %} <li>{{ parent.grouper }} <ul> {% for child in parents.list %} ... {% endfor %} </ul> </li> {% endfor %} </ul>



en django 1.3

Child.objects.select_related(''father'') #sql: select * from app_child left join app_parent on child_father_id=parent_id