mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-02-16 00:19:32 -06:00
pre-fetch versions
This commit is contained in:
@@ -1145,13 +1145,25 @@ class DocumentSerializer(
|
|||||||
root_doc = obj if obj.root_document_id is None else obj.root_document
|
root_doc = obj if obj.root_document_id is None else obj.root_document
|
||||||
if root_doc is None:
|
if root_doc is None:
|
||||||
return []
|
return []
|
||||||
versions_qs = Document.objects.filter(root_document=root_doc).only(
|
|
||||||
"id",
|
prefetched_cache = getattr(obj, "_prefetched_objects_cache", None)
|
||||||
"added",
|
prefetched_versions = (
|
||||||
"checksum",
|
prefetched_cache.get("versions")
|
||||||
"version_label",
|
if isinstance(prefetched_cache, dict)
|
||||||
|
else None
|
||||||
)
|
)
|
||||||
versions = [*versions_qs, root_doc]
|
|
||||||
|
versions: list[Document]
|
||||||
|
if prefetched_versions is not None:
|
||||||
|
versions = [*prefetched_versions, root_doc]
|
||||||
|
else:
|
||||||
|
versions_qs = Document.objects.filter(root_document=root_doc).only(
|
||||||
|
"id",
|
||||||
|
"added",
|
||||||
|
"checksum",
|
||||||
|
"version_label",
|
||||||
|
)
|
||||||
|
versions = [*versions_qs, root_doc]
|
||||||
|
|
||||||
def build_info(doc: Document) -> _DocumentVersionInfo:
|
def build_info(doc: Document) -> _DocumentVersionInfo:
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ from django.db.models import IntegerField
|
|||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
from django.db.models import Model
|
from django.db.models import Model
|
||||||
from django.db.models import OuterRef
|
from django.db.models import OuterRef
|
||||||
|
from django.db.models import Prefetch
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.db.models import Subquery
|
from django.db.models import Subquery
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
@@ -797,7 +798,21 @@ class DocumentViewSet(
|
|||||||
.annotate(effective_content=Coalesce(latest_version_content, F("content")))
|
.annotate(effective_content=Coalesce(latest_version_content, F("content")))
|
||||||
.annotate(num_notes=Count("notes"))
|
.annotate(num_notes=Count("notes"))
|
||||||
.select_related("correspondent", "storage_path", "document_type", "owner")
|
.select_related("correspondent", "storage_path", "document_type", "owner")
|
||||||
.prefetch_related("tags", "custom_fields", "notes")
|
.prefetch_related(
|
||||||
|
Prefetch(
|
||||||
|
"versions",
|
||||||
|
queryset=Document.objects.only(
|
||||||
|
"id",
|
||||||
|
"added",
|
||||||
|
"checksum",
|
||||||
|
"version_label",
|
||||||
|
"root_document_id",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"tags",
|
||||||
|
"custom_fields",
|
||||||
|
"notes",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_serializer(self, *args, **kwargs):
|
def get_serializer(self, *args, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user