Объект "Обновление задачи 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"),
]