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
« 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
8from api.models import UserPreferences
11def register(site):
12 site.register(User, UserAdmin)
13 site.register(Group, GroupAdmin)
15 site.register(UserPreferences, IndividualUserPreferencesAdmin)
18class UserPreferencesAdminForm(forms.ModelForm):
19 blur_images = forms.BooleanField(initial=True, required=False)
21 class Meta:
22 model = UserPreferences
23 fields = ["blur_images"]
25 def __init__(self, *args, **kwargs):
26 super().__init__(*args, **kwargs)
27 self.initial["blur_images"] = self.instance.blur_images
29 def save(self, commit=True):
30 self.instance.blur_images = self.cleaned_data.get("blur_images")
31 return super().save(commit=commit)
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 """
40 verbose_name_plural = "My Preferences"
41 verbose_name = "My Preferences"
42 form = UserPreferencesAdminForm
44 def get_queryset(self, request):
45 qs = super().get_queryset(request)
46 return qs.filter(user=request.user)
48 def has_change_permission(self, request, obj=None):
49 return True
51 def has_add_permission(*args, **kwargs):
52 return False
54 def has_delete_permission(*args, **kwargs):
55 return False
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 )