]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fixhancement: pass ordering to tag children (#11556)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Fri, 12 Dec 2025 16:43:16 +0000 (08:43 -0800)
committerGitHub <noreply@github.com>
Fri, 12 Dec 2025 16:43:16 +0000 (16:43 +0000)
src/documents/serialisers.py

index 3cb2b00af66dc693ba60ff3461fb330dc2b6bbcb..6265d291c27b5569d4c4bbdba3bff5b4366764d1 100644 (file)
@@ -21,6 +21,7 @@ from django.core.validators import MaxLengthValidator
 from django.core.validators import RegexValidator
 from django.core.validators import integer_validator
 from django.db.models import Count
+from django.db.models.functions import Lower
 from django.utils.crypto import get_random_string
 from django.utils.dateparse import parse_datetime
 from django.utils.text import slugify
@@ -38,6 +39,7 @@ from guardian.utils import get_user_obj_perms_model
 from rest_framework import fields
 from rest_framework import serializers
 from rest_framework.fields import SerializerMethodField
+from rest_framework.filters import OrderingFilter
 
 if settings.AUDIT_LOG_ENABLED:
     from auditlog.context import set_actor
@@ -575,15 +577,29 @@ class TagSerializer(MatchingModelSerializer, OwnedObjectSerializer):
     )
     def get_children(self, obj):
         filter_q = self.context.get("document_count_filter")
+        request = self.context.get("request")
         if filter_q is None:
-            request = self.context.get("request")
             user = getattr(request, "user", None) if request else None
             filter_q = get_document_count_filter_for_user(user)
             self.context["document_count_filter"] = filter_q
-        serializer = TagSerializer(
+
+        children_queryset = (
             obj.get_children_queryset()
             .select_related("owner")
-            .annotate(document_count=Count("documents", filter=filter_q)),
+            .annotate(document_count=Count("documents", filter=filter_q))
+        )
+
+        view = self.context.get("view")
+        ordering = (
+            OrderingFilter().get_ordering(request, children_queryset, view)
+            if request and view
+            else None
+        )
+        ordering = ordering or (Lower("name"),)
+        children_queryset = children_queryset.order_by(*ordering)
+
+        serializer = TagSerializer(
+            children_queryset,
             many=True,
             user=self.user,
             full_perms=self.full_perms,