Naveen Kumar M
Naveen Kumar M

Reputation: 7557

'Request' object is not iterable

I am trying to do simple crud demo project API's for mobile using django rest framework and getting below error

enter image description here

Project Name : crud_demo

App Name : crud_operations

crud_demo/urls.py

from django.conf.urls import include, url
from django.urls import path  

urlpatterns= [
    path('models/', views.model_list),
    path('models/<int:pk>/', views.model_detail),
]

crud_operations/models.py

  from django.db import models

# Create your models here.

class Member(models.Model):
    firstname = models.CharField(max_length=40)
    lastname = models.CharField(max_length=40)

crud_operations/serializers.py

from crud_operations.models import Member
from rest_framework import serializers

class MemberSerializer(serializers.ModelSerializer):
    class Meta:
        model = Member
        fields = ('firstname', 'lastname')

crud_operations/views.py

from django.shortcuts import render, redirect
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Member
from crud_operations.serializers import MemberSerializer

@api_view(['GET', 'POST'])
def model_list(request):
    if request == 'GET':
        member = Member.objects.all()
        serializer = MemberSerializer(member)
        return Response(serializer.data)
    elif request == 'POST':
        serializer = MemberSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    return Response({'key': request}, status=status.HTTP_200_OK)


@api_view(['GET', 'PUT', 'DELETE'])
def model_detail(request, pk):
    try:
        member = Member.objects.get(pk=pk)
    except Member.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request == 'GET':
        serializer = MemberSerializer(member)
        return Response(serializer.data)

    elif request == 'PUT':
        serializer = MemberSerializer(member, data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        member.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

    return Response({'key': 'value'}, status=status.HTTP_200_OK)

Upvotes: 2

Views: 6895

Answers (1)

Exprator
Exprator

Reputation: 27523

@api_view(['GET', 'POST'])
def model_list(request):
    if request.method == 'GET':
        member = Member.objects.all()
        serializer = MemberSerializer(member)
        return Response(serializer.data)
    elif request.method == 'POST':
        serializer = MemberSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    return Response({'key': request}, status=status.HTTP_200_OK)

request is content with a lot of objects, so to check the type, you need to use the method attribute of the HttpRequest object, to check what type of request is that, try the above ans

Upvotes: 5

Related Questions