Ilo/apps/accounts/admin.py
2026-05-02 20:01:30 +03:30

70 lines
2.3 KiB
Python

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)