Coverage for api/admin/user.py: 71%

38 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 06:14 +0000

1from django import forms 

2from django.contrib import admin 

3from django.contrib.auth.admin import GroupAdmin, UserAdmin 

4from django.contrib.auth.models import Group, User 

5from django.http.response import HttpResponseRedirect 

6from django.urls import reverse 

7 

8from api.models import UserPreferences 

9 

10 

11def register(site): 

12 site.register(User, UserAdmin) 

13 site.register(Group, GroupAdmin) 

14 

15 site.register(UserPreferences, IndividualUserPreferencesAdmin) 

16 

17 

18class UserPreferencesAdminForm(forms.ModelForm): 

19 blur_images = forms.BooleanField(initial=True, required=False) 

20 

21 class Meta: 

22 model = UserPreferences 

23 fields = ["blur_images"] 

24 

25 def __init__(self, *args, **kwargs): 

26 super().__init__(*args, **kwargs) 

27 self.initial["blur_images"] = self.instance.blur_images 

28 

29 def save(self, commit=True): 

30 self.instance.blur_images = self.cleaned_data.get("blur_images") 

31 return super().save(commit=commit) 

32 

33 

34class IndividualUserPreferencesAdmin(admin.ModelAdmin): 

35 """ 

36 Model admin for showing user preferences. This should only ever show the 

37 currently logged-in user's preferences 

38 """ 

39 

40 verbose_name_plural = "My Preferences" 

41 verbose_name = "My Preferences" 

42 form = UserPreferencesAdminForm 

43 

44 def get_queryset(self, request): 

45 qs = super().get_queryset(request) 

46 return qs.filter(user=request.user) 

47 

48 def has_change_permission(self, request, obj=None): 

49 return True 

50 

51 def has_add_permission(*args, **kwargs): 

52 return False 

53 

54 def has_delete_permission(*args, **kwargs): 

55 return False 

56 

57 def changelist_view(self, request, extra_context=None): 

58 obj = self.get_queryset(request).first() 

59 return HttpResponseRedirect( 

60 reverse("admin:api_userpreferences_change", args=[obj.id]) 

61 )