#29081 closed Cleanup/optimization (fixed)
Clarify QuerySet.select_related() example regarding "hitting the database"
| Reported by: | Дилян Палаузов | Owned by: | nobody | 
|---|---|---|---|
| Component: | Documentation | Version: | 2.0 | 
| Severity: | Normal | Keywords: | select_related | 
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description (last modified by )
https://docs.djangoproject.com/en/2.0/ref/models/querysets/#select-related says:
… then a call to Book.objects.select_related('author_ _hometown').get(id=4) will cache the related Person and the related City:
b = Book.objects.select_related('author_ _hometown').get(id=4)
p = b.author         # Doesn't hit the database.
c = p.hometown       # Doesn't hit the database.
b = Book.objects.get(id=4) # No select_related() in this example.
p = b.author         # Hits the database.
c = p.hometown       # Hits the database.
This leaves the impression, that the first snipped does not hit the database and the second snippet hits twice the database.
I propose:
- wring after 
b = Book.objects.select_related('author_ _hometown').get(id=4)the comment # Hits the database with INNER JOIN. - changing 
b = Book.objects.get(id=4) # No select_related() in this example.tob = Book.objects.get(id=4) # No select_related() in this example, hits the database. 
Change History (4)
comment:1 by , 8 years ago
| Description: | modified (diff) | 
|---|
comment:2 by , 8 years ago
| Description: | modified (diff) | 
|---|---|
| Has patch: | set | 
| Summary: | select_related and hitting the database → Clarify QuerySet.select_related() example regarding "hitting the database" | 
| Triage Stage: | Unreviewed → Accepted | 
  Note:
 See   TracTickets
 for help on using tickets.
    
PR