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:
When I go to the deleteOneSet URL to delete all the objects where var1=MS107, I get the following:
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.
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)
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:
When I go to the deleteOneSet URL to delete all the objects where var1=MS107, I get the following:
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.
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)