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 OTPCode, TeacherProfile, User @admin.register(User) class UserAdmin(BaseUserAdmin): ordering = ("-date_joined",) list_display = ("phone_number", "full_name", "role", "is_active", "is_staff", "date_joined") list_filter = ("role", "is_active", "is_staff") search_fields = ("phone_number", "full_name", "email") readonly_fields = ("last_login", "date_joined") fieldsets = ( (None, {"fields": ("phone_number", "password")}), (_("Personal info"), {"fields": ("full_name", "email", "language")}), ( _("Role & permissions"), {"fields": ("role", "is_active", "is_staff", "is_superuser", "groups", "user_permissions")}, ), (_("Important dates"), {"fields": ("last_login", "date_joined")}), ) add_fieldsets = ( ( None, { "classes": ("wide",), "fields": ("phone_number", "full_name", "role", "password1", "password2"), }, ), ) @admin.register(TeacherProfile) class TeacherProfileAdmin(admin.ModelAdmin): list_display = ("user", "headline", "is_verified", "is_approved", "approved_at", "approved_by") list_filter = ("is_approved", "is_verified") search_fields = ("user__phone_number", "user__full_name", "headline", "bio") raw_id_fields = ("user", "approved_by") actions = ["approve_selected"] @admin.action(description=_("Approve selected teacher profiles")) def approve_selected(self, request, queryset): for tp in queryset.filter(is_approved=False): tp.approve(by_user=request.user) @admin.register(OTPCode) class OTPCodeAdmin(admin.ModelAdmin): list_display = ("phone_number", "code_masked", "created_at", "expires_at", "is_used", "attempts") list_filter = ("is_used",) search_fields = ("phone_number",) readonly_fields = ( "phone_number", "code", "created_at", "expires_at", "attempts", "is_used", "consumed_at", ) @admin.display(description=_("code")) def code_masked(self, obj): if not obj.code: return "" return obj.code[0] + "*" * (len(obj.code) - 1)