From b3b2594a13dbdcaccd523ccb6e08dc75fcb355cc Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Tue, 11 Oct 2022 18:06:57 -0400 Subject: [PATCH] Integrate Profile admin --- program/admin.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/program/admin.py b/program/admin.py index c83b90c8..7e0505b0 100644 --- a/program/admin.py +++ b/program/admin.py @@ -1,4 +1,6 @@ from django.contrib import admin +from django.contrib.auth.admin import UserAdmin +from django.contrib.auth.models import User from program.models import ( Category, FundingCategory, @@ -8,6 +10,7 @@ from program.models import ( MusicFocus, Topic, Type, + UserProfile, ) @@ -23,6 +26,49 @@ class AdminWithNameType(admin.ModelAdmin): list_display = ("name", "type") +class UserProfileInline(admin.StackedInline): + model = UserProfile + fields = ("cba_username", "cba_user_token") + can_delete = False + verbose_name_plural = "Profile" + fk_name = "user" + + +class UserProfileUserAdmin(UserAdmin): + inlines = (UserProfileInline,) + + def get_queryset(self, request): + """Let common users only edit their own profile""" + if not request.user.is_superuser: + return super(UserAdmin, self).get_queryset(request).filter(pk=request.user.id) + + return super(UserAdmin, self).get_queryset(request) + + def get_readonly_fields(self, request, obj=None): + """Limit field access for common users""" + if not request.user.is_superuser: + return ( + "username", + "is_staff", + "is_superuser", + "is_active", + "date_joined", + "last_login", + "groups", + "user_permissions", + ) + return list() + + def get_inline_instances(self, request, obj=None): + """Append profile fields to UserAdmin""" + if not obj: + return list() + + return super(UserProfileUserAdmin, self).get_inline_instances(request, obj) + + +admin.site.unregister(User) +admin.site.register(User, UserProfileUserAdmin) admin.site.register(Category, AdminWithNameSlugIsActive) admin.site.register(FundingCategory, AdminWithNameSlugIsActive) admin.site.register(Language, LanguageAdmin) -- GitLab