Opened 9 years ago

Last modified 8 years ago

#26226 closed Bug

prefetch_related with Prefetch with queryset with explicit Ordering Ignored - single order_by — at Initial Version

Reported by: Alex Rothberg Owned by: nobody
Component: Database layer (models, ORM) Version: dev
Severity: Normal Keywords: prefetch
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

This is a variation of https://code.djangoproject.com/ticket/26211 which does not involve multiple calls to order_by.
Given these models:

class Parent(models.Model):
    pass

class Child(models.Model):
    saved_dt = models.DateTimeField(auto_now_add=True)
    parent = models.ForeignKey(Parent)

why does this return False?:

>>> Parent.objects.prefetch_related(Prefetch('child_set', Child.objects.order_by('saved_dt'))).first().child_set.all().ordered
False

it looks like the SQL queries generated do actually have the sort logic, but the query set does not reflect this fact:

SELECT "prefetch_parent"."id" FROM "prefetch_parent" ORDER BY "prefetch_parent"."id" ASC LIMIT 1; args=()
SELECT "prefetch_child"."id", "prefetch_child"."saved_dt", "prefetch_child"."parent_id" FROM "prefetch_child" WHERE "prefetch_child"."parent_id" IN (1) ORDER BY "prefetch_child"."saved_dt" ASC; args=(1,)

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top