From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 12 Dec 2025 16:43:16 +0000 (-0800) Subject: Fixhancement: pass ordering to tag children (#11556) X-Git-Tag: v2.20.2~1^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3a1d33225e397f2c320c197c2a79a0fd1fdaac40;p=thirdparty%2Fpaperless-ngx.git Fixhancement: pass ordering to tag children (#11556) --- diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 3cb2b00af6..6265d291c2 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -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,