from django.contrib import admin from django.core.exceptions import ValidationError from .models import ( Character, MathBTIAssessment, MathBTIResult, MathIdentity, SkillPackage, Story, StoryChoice, StoryMark, StoryRun, StoryVersion, UserRelationship, ) from .services import validate_story_content @admin.register(Story) class StoryAdmin(admin.ModelAdmin): list_display = ("title", "kind", "estimated_minutes", "is_visible") list_filter = ("kind", "is_visible") search_fields = ("title", "summary", "slug") list_editable = ("is_visible",) @admin.register(StoryVersion) class StoryVersionAdmin(admin.ModelAdmin): list_display = ("story", "version", "is_published", "published_at", "created_at") list_filter = ("is_published", "story__kind") search_fields = ("story__title",) ordering = ("story", "-version") def save_model(self, request, obj, form, change): errors = validate_story_content(obj.content) if errors: raise ValidationError(errors) super().save_model(request, obj, form, change) @admin.register(StoryRun) class StoryRunAdmin(admin.ModelAdmin): list_display = ("id", "user", "story_version", "status", "current_node", "updated_at") list_filter = ("status", "story_version__story") readonly_fields = ("started_at", "updated_at", "completed_at") search_fields = ("user__username", "user__nickname", "story_version__story__title") ordering = ("-updated_at",) admin.site.register(MathIdentity) admin.site.register(MathBTIAssessment) admin.site.register(MathBTIResult) admin.site.register(Character) admin.site.register(StoryChoice) admin.site.register(StoryMark) admin.site.register(UserRelationship) admin.site.register(SkillPackage)