- Create openclaw_daily app (no models, just app config) - Override get_app_list() in OpenClawAdminSite to inject Daily Reports item - Use get_app_list approach (not nav-sidebar template override) - Inject at top of app list for visibility
73 lines
2.3 KiB
Python
73 lines
2.3 KiB
Python
"""
|
|
Custom AdminSite for OpenClaw — adds Daily Report to sidebar.
|
|
"""
|
|
|
|
from django.contrib.admin import AdminSite
|
|
from django.contrib.admin.sites import AdminSite
|
|
from django.urls import path
|
|
|
|
from openclaw.admin_new_views import daily_report_list_view, daily_report_detail_view
|
|
|
|
|
|
class OpenClawAdminSite(AdminSite):
|
|
site_header = "OpenClaw Archive"
|
|
site_title = "OpenClaw Admin"
|
|
index_title = "Agent Sessions"
|
|
|
|
def get_urls(self):
|
|
urls = super().get_urls()
|
|
custom_urls = [
|
|
path(
|
|
"daily/",
|
|
self.admin_view(daily_report_list_view),
|
|
name="openclaw_daily",
|
|
),
|
|
path(
|
|
"daily-reports/",
|
|
self.admin_view(daily_report_list_view),
|
|
name="openclaw_daily_reports",
|
|
),
|
|
path(
|
|
"daily-reports/<str:agent_name>/<int:year>-<int:month>-<int:day>/",
|
|
self.admin_view(daily_report_detail_view),
|
|
name="openclaw_daily_report_detail",
|
|
),
|
|
]
|
|
return custom_urls + urls
|
|
|
|
def get_app_list(self, request, app_label=None):
|
|
"""
|
|
Inject 'Daily Reports' as a sidebar app item, before the OpenClaw app.
|
|
"""
|
|
app_list = super().get_app_list(request, app_label)
|
|
|
|
# Our custom item to inject
|
|
daily_reports_item = {
|
|
"name": "Daily Reports",
|
|
"app_label": "openclaw_daily",
|
|
"app_url": "/admin/daily-reports/",
|
|
"models": [
|
|
{
|
|
"name": "Daily Reports",
|
|
"object_name": "DailyReports",
|
|
"admin_url": "/admin/daily-reports/",
|
|
"view_only": True,
|
|
},
|
|
],
|
|
}
|
|
|
|
# Insert at the top of the app list
|
|
app_list.insert(0, daily_reports_item)
|
|
return app_list
|
|
|
|
|
|
openclaw_admin_site = OpenClawAdminSite(name="openclaw_admin")
|
|
|
|
# Re-register models with this custom site
|
|
from openclaw.admin import SessionAdmin, MessageAdmin, ToolCallAdmin
|
|
from openclaw.models import Session, Message, ToolCall
|
|
|
|
openclaw_admin_site.register(Session, SessionAdmin)
|
|
openclaw_admin_site.register(Message, MessageAdmin)
|
|
openclaw_admin_site.register(ToolCall, ToolCallAdmin)
|