Exempt MPTT-based models from centrally applying ordering on querysets

This commit is contained in:
Brian Tiemann 2025-03-11 09:38:04 -04:00
parent 5d81f911d6
commit fd502d553c
2 changed files with 8 additions and 0 deletions

View File

@ -12,6 +12,7 @@ from rest_framework.viewsets import GenericViewSet
from utilities.api import get_annotations_for_serializer, get_prefetches_for_serializer
from utilities.exceptions import AbortRequest
from utilities.mptt import TreeManager
from . import mixins
__all__ = (
@ -127,6 +128,9 @@ class NetBoxModelViewSet(
https://code.djangoproject.com/ticket/32811
"""
qs = super().get_queryset()
# MPTT-based models are exempt from this; use caution when annotating querysets of these models
if any(isinstance(manager, TreeManager) for manager in qs.model._meta.local_managers):
return qs
ordering = qs.model._meta.ordering
return qs.order_by(*ordering)

View File

@ -27,6 +27,7 @@ from utilities.exceptions import AbortRequest, AbortTransaction, PermissionsViol
from utilities.forms import BulkRenameForm, ConfirmationForm, restrict_form_fields
from utilities.forms.bulk_import import BulkImportForm
from utilities.htmx import htmx_partial
from utilities.mptt import TreeManager
from utilities.permissions import get_permission_for_model
from utilities.views import GetReturnURLMixin, get_viewname
from .base import BaseMultiObjectView
@ -131,6 +132,9 @@ class ObjectListView(BaseMultiObjectView, ActionsMixin, TableMixin):
https://code.djangoproject.com/ticket/32811
"""
qs = super().get_queryset(request)
# MPTT-based models are exempt from this; use caution when annotating querysets of these models
if any(isinstance(manager, TreeManager) for manager in qs.model._meta.local_managers):
return qs
ordering = qs.model._meta.ordering
return qs.order_by(*ordering)