Why does GET Details returns all Null and Delete Details returns "detail": "Method "GET" not allowed." when using objects.filter?

Question:

I built a rest framework in Django. When I do getAll, I get all the data from my database (no problem). The problem is when I do GET details and DELETE details. For the get and delete, I need to return and delete multiple objects (not just one and not all).
In my case the problem is using objects.filter(). When I try using objects.get(id=id), I have no problem

models.py:

class ProA(models.Model):
    var1 = models.CharField(max_length=200, null=True, blank=True)
    var2 = models.CharField(max_length=200, null=True, blank=True)
    var3 = models.CharField(max_length=200, null=True, blank=True)

serializers.py:

class ProASerializer(serializers.ModelSerializer):
    class Meta:
        model = ProA
        fields = '__all__'

urls.py:

urlpatterns = [
    path('proa-getAll/', views.getAll, name='proa_getAll'),
    path('proa-getOne/<str:var1>', views.getOneSet, name='proa_getOne'),
    path('proa-delete/<str:var1>', views.deleteOneSet, name='proa_delete'),
]

views.py:

@api_view(['GET'])
def getAll(request):
    proas = ProA.objects.all()
    serializer = ProASerializer(ProA.objects.all(), many=True)
    return Response(serializer.data)

@api_view(['GET'])
def getOneSet(request, var1):
    proa = ProA.objects.filter(var1=var1)
    serializer = ProASerializer(proa, many=False)
    return Response(serializer.data)

@api_view(['DELETE'])
def deleteOneSet(request, var1):
    try:
        data = ProA.objects.filter(var1=var1)

    except data.DoesNotExist:
        return Response({'message': 'The var1 value does not exist'}, status=status.HTTP_404_NOT_FOUND)

    data.delete()

    return Response({'message': 'Data was deleted successfully!'}, status=status.HTTP_204_NO_CONTENT)

When I go to the getOneSet URL to get all the objects where var1=MS107, I get the following:

GetOneSet

When I go to the deleteOneSet URL to delete all the objects where var1=MS107, I get the following:

delete one set

I have tried many things, but no idea how to solve them. I am new to Django, so I hope I added all info needed.

Asked By: ananvodo

||

Answers:

try to apply this:

@api_view(['GET'])
def getOneSet(request, var1):
    proa = ProA.objects.filter(var1=var1)
    serializer = ProASerializer(proa, many=True)
    return Response(serializer.data)

@api_view(['DELETE'])
def deleteOneSet(request, var1):
    data = ProA.objects.filter(var1=var1)
    if data:
        data.delete()
        return Response({'message': 'Data was deleted successfully!'}, status=status.HTTP_204_NO_CONTENT)
    return Response({'message': 'The var1 value does not exist'}, status=status.HTTP_404_NOT_FOUND)
Answered By: Magaren