Related Querysets from Inlines not getting cached
|Reported by:||john.parton@…||Owned by:||nobody|
|Severity:||Normal||Keywords:||admin, inline, queryset, queryset caching|
|Has patch:||no||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
Here's an overview of my code:
# models.py from django.db import models class ExampleParent(models.Model): def __unicode__(self): return u'Example Parent: %s' % self.id class ExampleInline(models.Model): parent = models.ForeignKey('ExampleParent') child = models.ForeignKey('ExampleChild') def __unicode__(self): return u'Example Inline: %s' % self.id class ExampleChild(models.Model): def __unicode__(self): return u'Example Child: %s' % self.id # admin.py from django.contrib import admin from admin_issue.example_problem.models import (ExampleParent, ExampleInline) class ExampleInlineInline(admin.TabularInline): model = ExampleInline class ExampleParentAdmin(admin.ModelAdmin): inlines = [ ExampleInlineInline ] admin.site.register(ExampleParent, ExampleParentAdmin)
If you go to the admin details for an ExampleParent instance, a query will be executed to fetch all of ExampleChild for as many ExampleInlines are associated with that ExampleParent. These are exactly identical queries. I would expect each queryset to be cached and for the ORM.
I have a few models in production that produces hundreds (sometimes over a thousand) queries. Most of them are exactly identical queries that could be cached.
I could probably patch my code to work around this, but it seems like the expected default behavior would be to cache these.
I can generate a small project with a sqlite db if necessary.