HH/apps/accounts/admin.py
2026-01-15 15:02:42 +03:00

66 lines
2.4 KiB
Python

"""
Accounts admin
"""
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import gettext_lazy as _
from .models import Role, User
@admin.register(User)
class UserAdmin(BaseUserAdmin):
"""Custom User admin"""
list_display = ['email', 'username', 'first_name', 'last_name', 'hospital', 'department', 'is_active', 'is_staff']
list_filter = ['is_active', 'is_staff', 'is_superuser', 'groups', 'hospital', 'department']
search_fields = ['email', 'username', 'first_name', 'last_name', 'employee_id']
ordering = ['-date_joined']
fieldsets = (
(None, {'fields': ('email', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'username', 'phone', 'employee_id')}),
(_('Organization'), {'fields': ('hospital', 'department')}),
(_('Profile'), {'fields': ('avatar', 'bio', 'language')}),
(_('Permissions'), {
'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions'),
}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2'),
}),
)
readonly_fields = ['date_joined', 'last_login', 'created_at', 'updated_at']
def get_readonly_fields(self, request, obj=None):
"""Make username readonly for existing users since we use email for auth"""
if obj:
return self.readonly_fields + ['username']
return self.readonly_fields
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.select_related('hospital', 'department')
@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
"""Role admin"""
list_display = ['display_name', 'name', 'level', 'group', 'created_at']
list_filter = ['level', 'name']
search_fields = ['name', 'display_name', 'description']
ordering = ['-level', 'name']
fieldsets = (
(None, {'fields': ('name', 'display_name', 'description')}),
('Configuration', {'fields': ('group', 'level', 'permissions')}),
('Metadata', {'fields': ('created_at', 'updated_at')}),
)
readonly_fields = ['created_at', 'updated_at']
filter_horizontal = ['permissions']