mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-26 10:28:37 -06:00
Merge 8e39481c6b
into d08a1bd07d
This commit is contained in:
commit
f49504852e
@ -185,7 +185,9 @@ class TagViewSet(NetBoxModelViewSet):
|
|||||||
|
|
||||||
|
|
||||||
class TaggedItemViewSet(RetrieveModelMixin, ListModelMixin, BaseViewSet):
|
class TaggedItemViewSet(RetrieveModelMixin, ListModelMixin, BaseViewSet):
|
||||||
queryset = TaggedItem.objects.prefetch_related('content_type', 'content_object', 'tag')
|
queryset = TaggedItem.objects.prefetch_related(
|
||||||
|
'content_type', 'content_object', 'tag'
|
||||||
|
).order_by('tag__weight', 'tag__name')
|
||||||
serializer_class = serializers.TaggedItemSerializer
|
serializer_class = serializers.TaggedItemSerializer
|
||||||
filterset_class = filtersets.TaggedItemFilterSet
|
filterset_class = filtersets.TaggedItemFilterSet
|
||||||
|
|
||||||
|
@ -12,3 +12,7 @@ class SerializerNotFound(Exception):
|
|||||||
|
|
||||||
class GraphQLTypeNotFound(Exception):
|
class GraphQLTypeNotFound(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class QuerySetNotOrdered(Exception):
|
||||||
|
pass
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from django.db.models import QuerySet
|
from django.db.models import QuerySet
|
||||||
from rest_framework.pagination import LimitOffsetPagination
|
from rest_framework.pagination import LimitOffsetPagination
|
||||||
|
|
||||||
|
from netbox.api.exceptions import QuerySetNotOrdered
|
||||||
from netbox.config import get_config
|
from netbox.config import get_config
|
||||||
|
|
||||||
|
|
||||||
@ -15,6 +16,12 @@ class OptionalLimitOffsetPagination(LimitOffsetPagination):
|
|||||||
|
|
||||||
def paginate_queryset(self, queryset, request, view=None):
|
def paginate_queryset(self, queryset, request, view=None):
|
||||||
|
|
||||||
|
if isinstance(queryset, QuerySet) and not queryset.ordered:
|
||||||
|
raise QuerySetNotOrdered(
|
||||||
|
"Paginating over an unordered queryset is unreliable. Ensure that a minimal "
|
||||||
|
"ordering has been applied to the queryset for this API endpoint."
|
||||||
|
)
|
||||||
|
|
||||||
if isinstance(queryset, QuerySet):
|
if isinstance(queryset, QuerySet):
|
||||||
self.count = self.get_queryset_count(queryset)
|
self.count = self.get_queryset_count(queryset)
|
||||||
else:
|
else:
|
||||||
|
17
netbox/users/migrations/0010_add_token_meta_ordering.py
Normal file
17
netbox/users/migrations/0010_add_token_meta_ordering.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 5.2.4 on 2025-07-23 17:28
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('users', '0009_update_group_perms'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='token',
|
||||||
|
options={'ordering': ('-created',)},
|
||||||
|
),
|
||||||
|
]
|
@ -74,6 +74,7 @@ class Token(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = _('token')
|
verbose_name = _('token')
|
||||||
verbose_name_plural = _('tokens')
|
verbose_name_plural = _('tokens')
|
||||||
|
ordering = ('-created',)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.key if settings.ALLOW_TOKEN_RETRIEVAL else self.partial
|
return self.key if settings.ALLOW_TOKEN_RETRIEVAL else self.partial
|
||||||
|
@ -67,5 +67,8 @@ def reapply_model_ordering(queryset: QuerySet) -> QuerySet:
|
|||||||
# MPTT-based models are exempt from this; use caution when annotating querysets of these models
|
# MPTT-based models are exempt from this; use caution when annotating querysets of these models
|
||||||
if any(isinstance(manager, TreeManager) for manager in queryset.model._meta.local_managers):
|
if any(isinstance(manager, TreeManager) for manager in queryset.model._meta.local_managers):
|
||||||
return queryset
|
return queryset
|
||||||
|
elif queryset.ordered:
|
||||||
|
return queryset
|
||||||
|
|
||||||
ordering = queryset.model._meta.ordering
|
ordering = queryset.model._meta.ordering
|
||||||
return queryset.order_by(*ordering)
|
return queryset.order_by(*ordering)
|
||||||
|
Loading…
Reference in New Issue
Block a user