perf: ad as asset

This commit is contained in:
ibuler
2025-04-02 19:12:09 +08:00
committed by 老广
parent 5e25361ee8
commit 3f452daee8
24 changed files with 391 additions and 19 deletions

View File

@@ -95,7 +95,9 @@ class QuerySetMixin:
get_queryset: Callable
def get_queryset(self):
queryset = super().get_queryset()
return super().get_queryset()
def filter_queryset(self, queryset):
if not hasattr(self, 'action'):
return queryset
if self.action == 'metadata':
@@ -105,8 +107,9 @@ class QuerySetMixin:
def setup_eager_loading(self, queryset, is_paginated=False):
is_export_request = self.request.query_params.get('format') in ['csv', 'xlsx']
no_request_page = self.request.query_params.get('limit') is None
# 不分页不走一般这个,是因为会消耗多余的 sql 查询, 不如分页的时候查询一次
if not is_export_request and not is_paginated:
if not is_export_request and not is_paginated and not no_request_page:
return queryset
serializer_class = self.get_serializer_class()
@@ -129,7 +132,7 @@ class QuerySetMixin:
serializer_class = self.get_serializer_class()
if page and serializer_class:
ids = [str(obj.id) for obj in page]
page = self.get_queryset().filter(id__in=ids)
page = model.objects.filter(id__in=ids)
page = self.setup_eager_loading(page, is_paginated=True)
page_mapper = {str(obj.id): obj for obj in page}
page = [page_mapper.get(_id) for _id in ids if _id in page_mapper]