Ограничение пользователей на изменение собственных файлов в django REST

Как поживаете? Я совсем новичок в Django и rest. Я заинтересован в написании проекта, который ограничивает пользователей в изменении их собственных задач (мой проект - управление задачами). Я знаю, что я должен использовать DjangoModelPermissions, но к сожалению, он не работает в моем проекте... он не возвращает никакой ошибки, но и не работает. Спасибо за помощь

Урлы моих приложений:

path("api/",views.ListTaskAPIView.as_view(),name="all_task"),
path('api/<int:pk>/', views.TaskDetailView.as_view(), name='detail_task'),
path("api/create/", views.CreateTaskAPIView.as_view(), name="create_task"),
path("api/update/<int:pk>/", views.UpdateTaskAPIView.as_view(), name="update_task"),
path("api/delete/<int:pk>/", views.DeleteTaskAPIView.as_view(), name="delete_task"),

Модели :

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

serializer:

from rest_framework import serializers
from .models import Task,Status

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


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

Просмотров:

class ListTaskAPIView(generics.ListAPIView):
    serializer_class = TaskSerializer
    model= Task
    template="task_list.html"
    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(CreateAPIView):
    """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"""
    queryset = Task.objects.all()
    serializer_class = TaskSerializer
    permission_classes = (DjangoModelPermissions, )


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

Настройки :

REST_FRAMEWORK = {
        'DEFAULT_PERMISSION_CLASSES': [
            'rest_framework.permissions.IsAuthenticated',
            'rest_framework.permissions.DjangoModelPermissions',
        ],
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.BasicAuthentication',  # enables simple command line authentication
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.TokenAuthentication',

        )
    }
Вернуться на верх