from rest_framework import permissions from rest_framework.parsers import MultiPartParser, FormParser from rest_framework import permissions, status from rest_framework import viewsets from rest_framework.response import Response from django.http import HttpRequest from django.db.models import QuerySet from .serializers import ProfileSerializer from .models import ProfileModel class ProfileViewSet(viewsets.ModelViewSet): queryset = ProfileModel.objects.all serializer_class = ProfileSerializer parser_classes = (MultiPartParser, FormParser) permission_classes = (permissions.IsAuthenticatedOrReadOnly,) def retrieve(self, request: HttpRequest, pk=None): if (not ProfileModel.objects.filter(pk=pk).exists()): return Response({"detail": "Profile not found."}, status=status.HTTP_404_NOT_FOUND) instance = ProfileModel.objects.get(pk=pk) instance.avatar_url.name = instance.avatar_url.name[instance.avatar_url.name.find("static") - 1:] return Response(self.serializer_class(instance).data, status=status.HTTP_200_OK) def list(self, request: HttpRequest): serializer = ProfileSerializer(self.queryset(), many=True) for profile in serializer.data: profile["avatar_url"] = profile["avatar_url"][profile["avatar_url"].find("static") - 1:] return Response(serializer.data) def perform_create(self, serializer): serializer.save(user=self.request.user) def perform_update(self, serializer): if (not ProfileModel.objects.filter(pk=pk).exists()): return Response({"detail": "Profile not found."}, status=status.HTTP_404_NOT_FOUND) profile: ProfileModel = ProfileModel.objects.get(pk=self.request.user.pk) avatar = self.request.data.get("file", None) if (avatar is not None): if (profile.avatar_url.name != "./profiles/static/avatars/default.avif"): profile.avatar_url.storage.delete(profile.avatar_url.name) profile.avatar_url = avatar profile.save()