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.order_by('-pk') serializer_class = ProfileSerializer parser_classes = (MultiPartParser, FormParser) permission_classes = (permissions.IsAuthenticatedOrReadOnly,) def retrieve(self, request: HttpRequest, pk=None): instance = self.get_object() instance.avatar_url.name = instance.avatar_url.name.replace("profiles", "", 1) return Response(self.serializer_class(instance).data, status=status.HTTP_200_OK) def get_queryset(self): profiles = ProfileModel.objects.all() for profile in profiles: profile.avatar_url.name = profile.avatar_url.name.replace("profiles", "", 1) return profiles def perform_create(self, serializer): serializer.save(user=self.request.user) def perform_update(self, serializer): query: QuerySet = ProfileModel.objects.filter(pk=self.request.user.pk) if (not query.exists()): return Response("profile not found", status=status.HTTP_400_BAD_REQUEST) 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 != "default.avif"): profile.avatar_url.storage.delete(profile.avatar_url.name) profile.avatar_url = avatar profile.save()