Files
Hulumath-Web/backend/contest/admin.py
T

107 lines
2.9 KiB
Python

from django.contrib import admin
from .models import (
CheatFlag,
Contest,
ContestAnswer,
ContestAttempt,
ContestQuestion,
LeaderboardSnapshot,
MathGameAttempt,
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(RatingHistory)
admin.site.register(LeaderboardSnapshot)
@admin.register(RealtimeMatch)
class RealtimeMatchAdmin(admin.ModelAdmin):
list_display = (
"id",
"contest",
"match_type",
"challenge_code",
"player_one",
"player_two",
"status",
"created_at",
)
list_filter = ("match_type", "status", "contest__track")
search_fields = (
"challenge_code",
"player_one__username",
"player_two__username",
)
readonly_fields = ("created_at", "started_at", "completed_at")
ordering = ("-created_at",)
@admin.register(MathGameAttempt)
class MathGameAttemptAdmin(admin.ModelAdmin):
list_display = (
"id",
"user",
"kind",
"difficulty",
"status",
"score",
"hints_used",
"started_at",
)
list_filter = ("kind", "difficulty", "status")
search_fields = ("user__username", "user__nickname")
readonly_fields = ("puzzle", "solution", "submission", "started_at", "submitted_at")
ordering = ("-started_at",)