Объект "Обновление задачи APIView" не имеет атрибута 'action'

Я совсем новичок в django и rest. Я хочу написать программу, которая позволяет владельцу обновлять или удалять только свои задачи. Когда я пытаюсь ее использовать, она не запрещает мне обновлять или удалять (другие задачи), но когда я нажимаю кнопку обновления или удаления, она возвращает мне эту ошибку "Update Task APIView' object has no attribute 'action'". Спасибо за помощь

models.py

class Task(models.Model):
    title=models.CharField(max_length=250)
    text=models.TextField()
    user=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=False)
    status=models.ForeignKey('Status',on_delete=models.SET_NULL,null=True)
    startDate=models.DateTimeField(auto_now_add=True)
    endDate=models.DateField(null=True)

    def __str__(self):
        return self.title

class Status(models.Model):
    name=models.CharField(max_length=250)

    def __str__(self):
        return self.name

Permissions.py:

from rest_framework import permissions


class IsOwner(permissions.BasePermission):

    def has_object_permission(self, request, view,obj):
        if (obj.user == request.user) | (view.action == 'retrieve'):
            return True
        else:
            return False

Serializers.py:

from rest_framework import serializers
from .models import Task,Status

class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        # fields = ['title', 'text', 'status', 'endDate']
        fields = '__all__'

class StatusSerializer(serializers.ModelSerializer):
    class Meta:
        model = Status
        fields = '__all__'

Views.py

class TaskViewSet(ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = Task.objects.all()
    serializer_class = TaskSerializer
    permission_classes = [permissions.IsAuthenticated, IsOwner,]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)


class ListTaskAPIView(generics.ListAPIView):
    serializer_class = TaskSerializer
    permission_classes = [IsAuthenticatedOrReadOnly]
    model= Task
    def get_queryset(self):
        """
        Optionally restricts the returned purchases to a given user,
        by filtering against a `username` query parameter in the URL.
        """
        query = self.request.GET.get('search')
        if query:
            object_list = self.model.objects.filter(Q(title__icontains=query) | Q(text__icontains=query))
        else:
            object_list = self.model.objects.all()
        return object_list


class CreateTaskAPIView(ListCreateAPIView):
    """This endpoint allows for creation of a todo"""
    queryset = Task.objects.all()
    serializer_class = TaskSerializer
    permission_classes = [IsAuthenticatedOrReadOnly]


class UpdateTaskAPIView(UpdateAPIView):
    """This endpoint allows for updating a specific todo by passing in the id of the todo to update"""
    serializer_class = TaskSerializer
    permission_classes = [IsAuthenticatedOrReadOnly,IsOwner,]
    queryset = Task.objects.all()

class DeleteTaskAPIView(DestroyAPIView):
    """This endpoint allows for deletion of a specific Todo from the database"""
    serializer_class = TaskSerializer
    permission_classes = [IsAuthenticatedOrReadOnly,IsOwner]
    queryset = Task.objects.all()

urls.py:

urlpatterns = [
    path("",views.ListTaskAPIView.as_view(),name="task_list"),
    path("create/", views.CreateTaskAPIView.as_view(),name="task_create"),
    path("update/<int:pk>/",views.UpdateTaskAPIView.as_view(),name="update_task"),
    path("delete/<int:pk>/",views.DeleteTaskAPIView.as_view(),name="delete_task"),
]
Вернуться на верх