Olá André, tudo bem com você?
Peço desculpas pela demora em obter um retorno.
Para implementar o CRUD completo em uma ViewSet do Django Rest Framework, você pode sobrescrever os métodos create
, retrieve
, update
, partial_update
e destroy
.
Podemos seguir a lógica do método create
para a criação dos demais métodos, alterando o status de retorno conforme a ação realizada. Por exemplo, no método retrieve
, podemos utilizar o status HTTP_200_OK
para indicar que a operação foi realizada com sucesso.
Segue um exemplo de como ficaria o código para implementar todos os métodos:
class AlunosViewSet(viewsets.ModelViewSet):
"""Exibindo todos os alunos e alunas"""
queryset = Aluno.objects.all()
authentication_classes = [BasicAuthentication]
permission_classes = [IsAuthenticated, DjangoModelPermissions]
def create(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid():
serializer.save()
response = Response(serializer.data, status=status.HTTP_201_CREATED)
id = str(serializer.data['id'])
response['Location'] = request.build_absolute_uri() + id
return response
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def retrieve(self, request, pk=None):
aluno = get_object_or_404(self.queryset, pk=pk)
serializer = self.serializer_class(aluno)
return Response(serializer.data, status=status.HTTP_200_OK)
def update(self, request, pk=None):
aluno = get_object_or_404(self.queryset, pk=pk)
serializer = self.serializer_class(aluno, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def partial_update(self, request, pk=None):
aluno = get_object_or_404(self.queryset, pk=pk)
serializer = self.serializer_class(aluno, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def destroy(self, request, pk=None):
aluno = get_object_or_404(self.queryset, pk=pk)
aluno.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.
Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!