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

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 

10 

11 

12class StaffRequiredMixin(UserPassesTestMixin): 

13 def test_func(self) -> bool: 

14 return self.request.user.is_staff 

15 

16 

17class UserListView(StaffRequiredMixin, ListView): 

18 model = User 

19 template_name = "admin/user_list.html" 

20 context_object_name = "users" 

21 ordering = "username" 

22 

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 

27 

28 

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") 

34 

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