diff --git a/netbox/core/api/views.py b/netbox/core/api/views.py index e4b6ea171..268d7d855 100644 --- a/netbox/core/api/views.py +++ b/netbox/core/api/views.py @@ -11,7 +11,6 @@ from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied from rest_framework.response import Response from rest_framework.routers import APIRootView -from rest_framework.viewsets import ReadOnlyModelViewSet from rq.job import Job as RQ_Job from rq.worker import Worker @@ -64,7 +63,7 @@ class DataFileViewSet(NetBoxReadOnlyModelViewSet): filterset_class = filtersets.DataFileFilterSet -class JobViewSet(ReadOnlyModelViewSet): +class JobViewSet(NetBoxReadOnlyModelViewSet): """ Retrieve a list of job results """ @@ -73,19 +72,20 @@ class JobViewSet(ReadOnlyModelViewSet): filterset_class = filtersets.JobFilterSet -class ObjectChangeViewSet(ReadOnlyModelViewSet): +class ObjectChangeViewSet(NetBoxReadOnlyModelViewSet): """ Retrieve a list of recent changes. """ metadata_class = ContentTypeMetadata + queryset = ObjectChange.objects.all() serializer_class = serializers.ObjectChangeSerializer filterset_class = filtersets.ObjectChangeFilterSet def get_queryset(self): - return ObjectChange.objects.valid_models() + return super().get_queryset().valid_models() -class ObjectTypeViewSet(ReadOnlyModelViewSet): +class ObjectTypeViewSet(NetBoxReadOnlyModelViewSet): """ Read-only list of ObjectTypes. """ @@ -94,6 +94,16 @@ class ObjectTypeViewSet(ReadOnlyModelViewSet): serializer_class = serializers.ObjectTypeSerializer filterset_class = filtersets.ObjectTypeFilterSet + def initial(self, request, *args, **kwargs): + """ + Override initial() to skip the restrict() call since ObjectType (a ContentType proxy) + doesn't use RestrictedQuerySet and is publicly accessible metadata. + """ + # Call GenericViewSet.initial() directly, skipping BaseViewSet.initial() + # which would try to call restrict() on the queryset + from rest_framework.viewsets import GenericViewSet + GenericViewSet.initial(self, request, *args, **kwargs) + class BaseRQViewSet(viewsets.ViewSet): """