from django.contrib import admin from .models import ( CheatFlag, Contest, ContestAnswer, ContestAttempt, ContestQuestion, LeaderboardSnapshot, Question, QuestionVersion, RatingHistory, RealtimeMatch, ) class ContestQuestionInline(admin.TabularInline): model = ContestQuestion extra = 1 @admin.register(Contest) class ContestAdmin(admin.ModelAdmin): list_display = ("title", "kind", "track", "status", "starts_at", "ends_at") list_filter = ("kind", "track", "status") search_fields = ("title", "slug") list_editable = ("status",) ordering = ("-starts_at", "title") inlines = [ContestQuestionInline] @admin.register(ContestAttempt) class ContestAttemptAdmin(admin.ModelAdmin): list_display = ("id", "user", "contest", "status", "score", "duration_ms", "started_at") list_filter = ("status", "contest__kind", "contest__track") readonly_fields = ("started_at", "submitted_at") @admin.register(CheatFlag) class CheatFlagAdmin(admin.ModelAdmin): list_display = ("attempt", "reason", "status", "created_at") list_filter = ("status", "reason") search_fields = ("attempt__user__username", "attempt__user__nickname", "reason") list_editable = ("status",) ordering = ("-created_at",) @admin.register(Question) class QuestionAdmin(admin.ModelAdmin): list_display = ("slug", "track", "is_active", "tags") list_filter = ("track", "is_active") search_fields = ("slug", "versions__prompt") list_editable = ("is_active",) @admin.register(QuestionVersion) class QuestionVersionAdmin(admin.ModelAdmin): list_display = ("question", "version", "prompt", "created_at") search_fields = ("question__slug", "prompt", "answer") ordering = ("question", "-version") admin.site.register(ContestAnswer) admin.site.register(RealtimeMatch) admin.site.register(RatingHistory) admin.site.register(LeaderboardSnapshot)