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

59 lines
1.7 KiB
Python

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)