Abhishek Taparia
Abhishek Taparia

Reputation: 99

POST, PUT, DELETE in Django RESTful framework not working

I'd like to post to my Django server using POST so I can add a employee item.

views.py

class EmployeeList(generics.ListAPIView):
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer


class EmployeeDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer

models.py

class Employee(models.Model):
    firstname=models.CharField(max_length=10)
    lastname=models.CharField(max_length=10)
    emp_id=models.IntegerField()

    def __str__(self):
        return self.firstname;

serializer.py

class EmployeeSerializer(serializers.ModelSerializer):

    class Meta:
        model=Employee
        # fields={'firstname','lastname'}
        fields='__all__'

My POST request:

{
    "id": 8,
    "firstname": "zxcvb",
    "lastname": "bnmmm",
    "emp_id": 3
}

Error I got:

{
    "detail": "Method \"POST\" not allowed."
}

Even after using generics.RetrieveUpdateDestroyAPIView I can't POST, PUT or DELETE.

PS: I’m new to Django REST framework.

Upvotes: 1

Views: 1458

Answers (1)

Lucas Weyne
Lucas Weyne

Reputation: 1152

To provide a post method handler you'll need a view with a create() action (CreateAPIView or ListCreateAPIView). Check the documention about concrete view classes.

Change your EmployeeList view to inherit from ListCreateAPIView for add read-write endpoints to represent a collection of employees

class EmployeeList(generics.ListCreateAPIView):
    queryset = Employee.objects.all()
    serializer_class = EmployeeSerializer

Now, just register the views with the URL conf as usual

urlpatterns = [
    path('employees/', EmployeeList, name='employee-list'),
    path('employees/<int:pk>/', EmployeeDetail, name='employee-detail'),
]

Concrete view classes map methods defined in mixins such ListModelMixin, CreateModelMixin, RetrieveModelMixin, etc. to HTTP methods. By defaults, theese actions (see here) are mapped to the following HTTP methods

  • list - get
  • create - post
  • retrieve - get
  • update - put
  • partial_update - patch
  • destroy - delete

Upvotes: 1

Related Questions