A left outer reverse select_related in Django?
Starting from Django 1.4 prefetch_related
does what you want.
Parent.objects.prefetch_related('child_set')
Related(!) django docs : https://docs.djangoproject.com/en/dev/ref/models/querysets/#prefetch-related.
Sorry to once again post a link to my blog, but I have written about a technique to simulate select_related on backwards relationships.
In this case, I think the best thing to do is list the children, then get the parent from them, like this:
children = Child.objects.filter(...).select_related('parent').order_by('parent')
Then in the template, possibly use a regroup
(note the order_by
above):
{% 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>