Opened 2 months ago

Last modified 10 hours ago

#29230 assigned Bug

Incorrect behavior of QuerySet.prefetch_related() in some circumstances during multilevel data prefetching

Reported by: Alex Sichkar Owned by: Paulo
Component: Database layer (models, ORM) Version: 1.11
Severity: Normal Keywords: prefetch_related
Cc: Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no


In some circumstances prefetched data might be overwritten.

IMHO this ticket is related to the issue:

If I revert changes from this pull request:
there is no such problem.

Prepared sample project with test case to reproduce the issue.

Attachments (1) (8.2 KB) - added by Alex Sichkar 2 months ago.

Download all attachments as: .zip

Change History (4)

Changed 2 months ago by Alex Sichkar

Attachment: added

comment:1 Changed 2 months ago by Tim Graham

Triage Stage: UnreviewedAccepted

I found that your test case was fixed in Django 2.0 by 379caf397ea41923278821085204c296f960e70e. Since a regression test wasn't added as part of that commit, I'll accept the ticket to do that. If you can adapt your test for tests/prefetch_related (using existing models as much as possible) that would be great.

comment:2 Changed 11 days ago by Paulo

Owner: changed from nobody to Paulo
Status: newassigned

comment:3 Changed 10 hours ago by Paulo


The commit in didn't fix this.
It just reversed the execution order of prefetch objects.

Changing the attached test from:

projects = Project.objects.prefetch_related(
    Prefetch('tasks', queryset=tasks),
    Prefetch('tasks', to_attr='some_attr_name'),


projects = Project.objects.prefetch_related(
    Prefetch('tasks', to_attr='some_attr_name'),
    Prefetch('tasks', queryset=tasks),

Made it fail again.

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