Расширение нескольких наборов CustomViewsets - как readonly с Django
В нашем проекте ведущий разработчик поставил задачу рефакторинга некоторых наборов представлений в нашем проекте.
Создайте представление Активы, доступное только для чтения, которое будет возвращать все активы по умолчанию и romy
.
Итак, исходный код выглядит следующим образом
class DefaultAssetViewSet(viewsets.ModelViewSet):
queryset = DefaultAsset.objects.all()
serializer_class = DefaultAssetSerializer
permission_classes = [IsAdminUser]
filter_backends = [DjangoFilterBackend, OrderingFilter, SearchFilter]
filterset_fields = ['name']
search_fields = ['name', 'default_value']
@action(detail=False, methods=['get'])
def defaults(self, request):
defaults = {}
for d in self.queryset.all():
defaults[d.name] = d.default_value
return Response({'defaults': defaults})
def destroy(self, request, *args, **kwargs):
try:
return super().destroy(request, *args, **kwargs)
except models.ProtectedError:
return Response(
{'detail': ErrorDetail('Unable to perform this action.')},
status=status.HTTP_403_FORBIDDEN)
class RomyAssetViewSet(viewsets.ModelViewSet):
queryset = RomyAsset.objects.all()
serializer_class = RomyAssetSerializer
permission_classes = [IsAdminUser]
filter_backends = [DjangoFilterBackend, OrderingFilter, SearchFilter]
filterset_fields = [
'romy', 'default_asset'
]
search_fields = [
'romy', 'default_asset'
]
Итак, первая идея, которая пришла мне в голову, - это расширить эти два представления до класса AssetViewSet
class AssetViewSet(RomyAssetViewSet, DefaultAssetViewSet,viewsets.ReadOnlyModelViewSet):
""" some code here"""
Возможно ли расширение пользовательских наборов представлений, как эти? А также как реализовать get или list для RomyAssetViewet и DefaultAssetViewset внутри AssetViewsetClass?