mirror of
https://github.com/daniviga/django-ram.git
synced 2026-02-04 10:00:40 +01:00
Improve performance oprimizing queries (#56)
* Extend test coverage * Implement query optimization * More aggressing code reuse * Add more indexes and optimize usage * Fix tests * Further optimizations, improve counting to rely on backend DB * chore: add Makefile for frontend asset minification - Add comprehensive Makefile with targets for JS and CSS minification - Implements instructions from ram/portal/static/js/src/README.md - Provides targets: install, minify, minify-js, minify-css, clean, watch - Fix main.min.js to only include theme_selector.js and tabs_selector.js - Remove validators.js from minified output per README instructions * Add a Makefile to compile JS and CSS * docs: add blank line whitespace rule to AGENTS.md Specify that blank lines must not contain any whitespace (spaces or tabs) to maintain code cleanliness and PEP 8 compliance * Update for 0.20 release with optimizations * Improve Makefile
This commit is contained in:
@@ -98,6 +98,11 @@ class BookAdmin(SortableAdminBase, admin.ModelAdmin):
|
||||
search_fields = ("title", "publisher__name", "authors__last_name")
|
||||
list_filter = ("publisher__name", "authors", "published")
|
||||
|
||||
def get_queryset(self, request):
|
||||
"""Optimize queryset with select_related and prefetch_related."""
|
||||
qs = super().get_queryset(request)
|
||||
return qs.with_related()
|
||||
|
||||
fieldsets = (
|
||||
(
|
||||
None,
|
||||
@@ -189,6 +194,12 @@ class BookAdmin(SortableAdminBase, admin.ModelAdmin):
|
||||
]
|
||||
|
||||
data = []
|
||||
|
||||
# Prefetch related data to avoid N+1 queries
|
||||
queryset = queryset.select_related(
|
||||
'publisher', 'shop'
|
||||
).prefetch_related('authors', 'tags', 'property__property')
|
||||
|
||||
for obj in queryset:
|
||||
properties = settings.CSV_SEPARATOR_ALT.join(
|
||||
"{}:{}".format(property.property.name, property.value)
|
||||
@@ -266,6 +277,11 @@ class CatalogAdmin(SortableAdminBase, admin.ModelAdmin):
|
||||
"scales__scale",
|
||||
)
|
||||
|
||||
def get_queryset(self, request):
|
||||
"""Optimize queryset with select_related and prefetch_related."""
|
||||
qs = super().get_queryset(request)
|
||||
return qs.with_related()
|
||||
|
||||
fieldsets = (
|
||||
(
|
||||
None,
|
||||
@@ -350,6 +366,12 @@ class CatalogAdmin(SortableAdminBase, admin.ModelAdmin):
|
||||
]
|
||||
|
||||
data = []
|
||||
|
||||
# Prefetch related data to avoid N+1 queries
|
||||
queryset = queryset.select_related(
|
||||
'manufacturer', 'shop'
|
||||
).prefetch_related('scales', 'tags', 'property__property')
|
||||
|
||||
for obj in queryset:
|
||||
properties = settings.CSV_SEPARATOR_ALT.join(
|
||||
"{}:{}".format(property.property.name, property.value)
|
||||
@@ -490,6 +512,11 @@ class MagazineAdmin(SortableAdminBase, admin.ModelAdmin):
|
||||
"publisher__name",
|
||||
)
|
||||
|
||||
def get_queryset(self, request):
|
||||
"""Optimize queryset with select_related and prefetch_related."""
|
||||
qs = super().get_queryset(request)
|
||||
return qs.select_related('publisher').prefetch_related('tags')
|
||||
|
||||
fieldsets = (
|
||||
(
|
||||
None,
|
||||
|
||||
Reference in New Issue
Block a user