|
7 | 7 | from django.views.generic import ListView, UpdateView, DeleteView |
8 | 8 | from django.urls import reverse_lazy |
9 | 9 | from django.views.generic import CreateView |
| 10 | + |
| 11 | +from tasks.models import Task |
10 | 12 | from .forms import CustomUserCreationForm |
11 | 13 |
|
12 | 14 |
|
@@ -50,14 +52,30 @@ def form_valid(self, form): |
50 | 52 | return response |
51 | 53 |
|
52 | 54 |
|
53 | | -class UserDeleteView(LoginRequiredMixin, OnlySelfMixin, DeleteView): |
| 55 | +class UserDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): |
54 | 56 | model = User |
55 | | - template_name = "users/delete.html" |
| 57 | + template_name = "users/confirm_delete.html" |
56 | 58 | success_url = reverse_lazy("users:list") |
| 59 | + login_url = "users:login" |
| 60 | + |
| 61 | + def test_func(self): |
| 62 | + return self.get_object().pk == self.request.user.pk |
57 | 63 |
|
58 | | - def delete(self, request, *args, **kwargs): |
59 | | - messages.success(self.request, "Пользователь успешно удалён.") |
60 | | - return super().delete(request, *args, **kwargs) |
| 64 | + def handle_no_permission(self): |
| 65 | + if self.request.user.is_authenticated: |
| 66 | + messages.error(self.request, "Можно удалять только свой аккаунт.") |
| 67 | + return redirect("users:list") |
| 68 | + return super().handle_no_permission() |
| 69 | + |
| 70 | + def dispatch(self, request, *args, **kwargs): |
| 71 | + user = self.get_object() |
| 72 | + if hasattr(user, "created_tasks") and user.created_tasks.exists(): |
| 73 | + messages.error(request, "Нельзя удалить пользователя, связанного с задачами.") |
| 74 | + return redirect("users:list") |
| 75 | + if hasattr(user, "executed_tasks") and user.executed_tasks.exists(): |
| 76 | + messages.error(request, "Нельзя удалить пользователя, связанного с задачами.") |
| 77 | + return redirect("users:list") |
| 78 | + return super().dispatch(request, *args, **kwargs) |
61 | 79 |
|
62 | 80 |
|
63 | 81 | class UserLoginView(LoginView): |
|
0 commit comments