76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
from django.contrib import admin
|
|
from django.contrib.auth.admin import UserAdmin
|
|
|
|
from .models import (
|
|
AuditLog,
|
|
InviteCode,
|
|
InviteCodeUsage,
|
|
User,
|
|
UserSession,
|
|
VisitorMigration,
|
|
)
|
|
|
|
|
|
@admin.register(User)
|
|
class HulumathUserAdmin(UserAdmin):
|
|
fieldsets = UserAdmin.fieldsets + (
|
|
("葫芦数学", {"fields": ("nickname", "avatar_url", "bio", "track", "rating")}),
|
|
)
|
|
add_fieldsets = UserAdmin.add_fieldsets + (
|
|
("葫芦数学", {"fields": ("nickname", "track")}),
|
|
)
|
|
list_display = ("username", "nickname", "track", "rating", "is_active", "date_joined")
|
|
list_filter = ("is_active", "is_staff", "track", "date_joined")
|
|
search_fields = ("username", "nickname", "email")
|
|
ordering = ("-date_joined",)
|
|
|
|
|
|
@admin.register(InviteCode)
|
|
class InviteCodeAdmin(admin.ModelAdmin):
|
|
list_display = ("code", "group", "used_count", "max_uses", "expires_at", "is_active")
|
|
list_filter = ("is_active", "group")
|
|
search_fields = ("code", "group")
|
|
readonly_fields = ("used_count", "created_at")
|
|
ordering = ("-created_at",)
|
|
|
|
|
|
@admin.register(InviteCodeUsage)
|
|
class InviteCodeUsageAdmin(admin.ModelAdmin):
|
|
list_display = ("invite_code", "user", "used_at", "ip_address")
|
|
search_fields = ("invite_code__code", "user__username", "user__nickname")
|
|
readonly_fields = ("invite_code", "user", "used_at", "ip_address")
|
|
ordering = ("-used_at",)
|
|
|
|
|
|
@admin.register(UserSession)
|
|
class UserSessionAdmin(admin.ModelAdmin):
|
|
list_display = ("user", "ip_address", "last_seen_at", "revoked_at")
|
|
search_fields = ("user__username", "user__nickname", "ip_address")
|
|
list_filter = ("revoked_at",)
|
|
readonly_fields = ("user", "session_key", "user_agent", "ip_address", "last_seen_at")
|
|
|
|
|
|
@admin.register(VisitorMigration)
|
|
class VisitorMigrationAdmin(admin.ModelAdmin):
|
|
list_display = ("user", "status", "created_at", "applied_at")
|
|
list_filter = ("status",)
|
|
search_fields = ("user__username", "user__nickname")
|
|
readonly_fields = ("user", "payload", "summary", "created_at", "applied_at")
|
|
|
|
|
|
@admin.register(AuditLog)
|
|
class AuditLogAdmin(admin.ModelAdmin):
|
|
list_display = ("action", "actor", "target_type", "target_id", "created_at")
|
|
list_filter = ("action", "target_type")
|
|
search_fields = ("actor__username", "action", "target_type", "target_id", "reason")
|
|
readonly_fields = (
|
|
"actor",
|
|
"action",
|
|
"target_type",
|
|
"target_id",
|
|
"reason",
|
|
"metadata",
|
|
"created_at",
|
|
)
|
|
ordering = ("-created_at",)
|