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,)
Note:
See TracTickets
for help on using tickets.