In my Admin page I have Order model with TabularInline of OrderItem model
class OrderItemStackAdmin(admin.TabularInline):
model = OrderItem
extra = 0
fieldsets = (
(_('Product'), {
'fields': ('product', 'variant')
}), (_('Add-Ons'), {
'fields': ('product_add_ons', 'add_ons_note')
}), (_('Price'), {
'fields': ('quantity', 'product_price', 'add_ons_total_price')
}), (_('Discount'), {
'fields': ('discount',)
})
)
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related(
"customer_order",
"product",
"variant"
).prefetch_related('product_add_ons')
Three foreign keys: 1.Order 2.Product 3.Variant
One ManyToMany: product_add_ons
With select_related/prefetch related, only 19 queries reduced, however, 35 duplicate/similar queries are found.
Please note the below facts:
- ALL duplicated queries share
NO SCROLL CURSOR WITH HOLD FOR SELECT
Removing the inline removes all duplicated queries.
Removing any FK or ManyToMany also greatly reduce duplicated queries
Removing select_related/prefetch_related will result in
70 queries including 55 similar and 35 duplicates
Any ideas why this is happening?
