Python · 2416 bytes Raw Blame History
1 # apps/trees/admin.py
2 from django.contrib import admin
3 from .models import FileSystemTree, DirectoryNode, GameSession
4
5
6 class DirectoryNodeInline(admin.TabularInline):
7 model = DirectoryNode
8 extra = 0
9 fields = ['name', 'path', 'is_fhs_standard', 'parent']
10 readonly_fields = ['path']
11
12 def has_add_permission(self, request, obj=None):
13 return False
14
15
16 @admin.register(FileSystemTree)
17 class FileSystemTreeAdmin(admin.ModelAdmin):
18 list_display = ['name', 'created_at', 'is_completed', 'mole_location', 'player_location']
19 list_filter = ['is_completed', 'created_at']
20 readonly_fields = ['created_at', 'completed_at', 'tree_data', 'seed']
21
22 fieldsets = (
23 ('Basic Info', {
24 'fields': ('name', 'seed', 'created_at')
25 }),
26 ('Game State', {
27 'fields': ('player_location', 'mole_location', 'is_completed', 'completed_at')
28 }),
29 ('Tree Data', {
30 'fields': ('tree_data',),
31 'classes': ('collapse',)
32 })
33 )
34
35 actions = ['regenerate_trees']
36
37 def regenerate_trees(self, request, queryset):
38 for tree in queryset:
39 tree.generate_tree()
40 self.message_user(request, f"Regenerated {queryset.count()} trees")
41 regenerate_trees.short_description = "Regenerate selected trees"
42
43
44 @admin.register(DirectoryNode)
45 class DirectoryNodeAdmin(admin.ModelAdmin):
46 list_display = ['path', 'name', 'tree', 'is_fhs_standard', 'parent']
47 list_filter = ['is_fhs_standard', 'tree']
48 search_fields = ['path', 'name']
49 raw_id_fields = ['tree', 'parent']
50
51 def get_queryset(self, request):
52 return super().get_queryset(request).select_related('tree', 'parent')
53
54
55 @admin.register(GameSession)
56 class GameSessionAdmin(admin.ModelAdmin):
57 list_display = ['player_name', 'tree', 'started_at', 'completed_at', 'commands_used', 'time_taken']
58 list_filter = ['completed_at', 'started_at']
59 readonly_fields = ['started_at', 'completed_at', 'time_taken', 'command_history']
60
61 fieldsets = (
62 ('Player Info', {
63 'fields': ('player_name', 'tree')
64 }),
65 ('Game Stats', {
66 'fields': ('started_at', 'completed_at', 'time_taken', 'commands_used', 'directories_visited')
67 }),
68 ('Command History', {
69 'fields': ('command_history',),
70 'classes': ('collapse',)
71 })
72 )