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
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
)
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,