Coverage for sm / views_admin.py: 77%
30 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-24 12:43 +0000
1from django.views.generic import ListView, UpdateView
2from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
3from django.contrib.auth.models import User, Group
4from .models import GroupProfile
5from .forms_admin import GroupProfileForm
6from django.urls import reverse_lazy
7from django.contrib import messages
8from django.utils.translation import gettext as _
9from typing import Any
12class StaffRequiredMixin(UserPassesTestMixin):
13 def test_func(self) -> bool:
14 return self.request.user.is_staff
17class UserListView(StaffRequiredMixin, ListView):
18 model = User
19 template_name = "admin/user_list.html"
20 context_object_name = "users"
21 ordering = "username"
23 def get_context_data(self, **kwargs: Any) -> Any:
24 context = super().get_context_data(**kwargs)
25 context["groups"] = Group.objects.all().prefetch_related("profile")
26 return context
29class GroupProfileUpdateView(StaffRequiredMixin, UpdateView):
30 model = GroupProfile
31 form_class = GroupProfileForm
32 template_name = "admin/group_profile_edit.html"
33 success_url = reverse_lazy("user_management_list")
35 def form_valid(self, form: Any) -> Any:
36 response = super().form_valid(form)
37 messages.success(self.request, _("Group profile updated successfully."))
38 return response