88from django .contrib .messages .views import SuccessMessageMixin
99from django .contrib .auth .mixins import LoginRequiredMixin
1010from django .utils .translation import gettext_lazy as _
11-
11+ from django . shortcuts import redirect
1212from django_filters .views import FilterView
13-
13+ from django . contrib import messages
1414from .forms import CreateTaskForm
1515from .models import Task
1616from .filters import TaskFilter
17-
17+ from django . core . exceptions import PermissionDenied
1818
1919
2020class TaskListView (LoginRequiredMixin , FilterView ):
@@ -44,6 +44,14 @@ class DetailTaskView(LoginRequiredMixin, DetailView):
4444
4545
4646
47+ # class DeleteTaskView(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
48+ # pattern_name = "tasks:list"
49+ # model = Task
50+ # success_url = reverse_lazy("tasks:task_list")
51+ # template_name = "tasks/delete.html"
52+ # success_message = _("Task deleted successfully")
53+ # login_url = reverse_lazy("login")
54+ # redirect_field_name = None
4755class DeleteTaskView (LoginRequiredMixin , SuccessMessageMixin , DeleteView ):
4856 pattern_name = "tasks:list"
4957 model = Task
@@ -53,6 +61,22 @@ class DeleteTaskView(LoginRequiredMixin, SuccessMessageMixin, DeleteView):
5361 login_url = reverse_lazy ("login" )
5462 redirect_field_name = None
5563
64+ permission_denied_url = success_url
65+ permission_denied_message = _ ("Only the task's author can delete it" )
66+
67+ def get_object (self , queryset = None ):
68+ obj = super ().get_object (queryset )
69+ if obj .author != self .request .user :
70+ raise PermissionDenied
71+ return obj
72+
73+ def dispatch (self , request , * args , ** kwargs ):
74+ try :
75+ return super ().dispatch (request , * args , ** kwargs )
76+ except PermissionDenied :
77+ messages .error (request , self .permission_denied_message )
78+ return redirect (self .permission_denied_url )
79+
5680
5781class UpdateTaskView (LoginRequiredMixin , SuccessMessageMixin , UpdateView ):
5882 model = Task
0 commit comments