On 19 Paź, 20:21, Daniel Roseman <dan...@roseman.org.uk> wrote: > > You can't do this in one query with Django's ORM. > > One way of doing it in two queries might be to get use .annotate() to > add the max id of the related objectrevision for each revision, then > get all those objectrevisions (untested): > > objects = Object.objects.all().annotate(revision_id=Max > ('objectrevision__id')) > objectrevisions = ObjectRevision.objects.filter(id__in= > [o.revision_id for o in objects]) >
I found this solution, but we are talking about thousends of objects, so SQL query would be really huge. I' tested it with MySQL Query Browser and passing ton of ids to `WHERE id IN (...)` clause was causing major overhead comparing to using JOIN. Fortunately, in the mean time, I've found a nice solution using SQL views: http://wolfram.kriesing.de/blog/index.php/2007/django-nice-and-critical-article#comment-48425 This is not strictly a solution to the problem I asked, but it allows to hide SQL under the floor and just use Django ORM in everydays work. Anyway, thank you for confirmation on this limitation, I wasn't sure about it. -- Tomasz Zielinski http://pyconsultant.eu --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---