fix: add Daily Reports to admin sidebar via ready() monkey-patch

- openclaw_daily/apps.py ready(): monkey-patch admin.site.get_urls() to add
  daily/ and daily-reports/ URLs under admin namespace (admin: prefix)
- admin_custom_site.py: simplified (no custom site needed)
- Revert urls.py to use default admin.site
- URL now correctly resolves as admin:openclaw_daily_report_detail
This commit is contained in:
ishenwei
2026-04-08 20:48:00 +08:00
parent 21c5e895e0
commit 6bd99d043c
3 changed files with 38 additions and 89 deletions

View File

@@ -1,20 +1,7 @@
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from openclaw.admin_new_views import (
daily_report_list_view,
daily_report_detail_view,
)
urlpatterns = [ urlpatterns = [
# Custom daily report URLs (before admin.site to take precedence)
path("admin/daily/", admin.site.admin_view(daily_report_list_view), name="openclaw_daily"),
path("admin/daily-reports/", admin.site.admin_view(daily_report_list_view), name="openclaw_daily_reports"),
path(
"admin/daily-reports/<str:agent_name>/<int:year>-<int:month>-<int:day>/",
admin.site.admin_view(daily_report_detail_view),
name="openclaw_daily_report_detail",
),
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
path("api/", include("openclaw.urls")), path("api/", include("openclaw.urls")),
] ]

View File

@@ -1,72 +1 @@
""" # Kept for potential future use — currently not used
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)

View File

@@ -8,11 +8,44 @@ class OpenClawDailyConfig(AppConfig):
def ready(self): def ready(self):
from django.contrib import admin from django.contrib import admin
from django.urls import path
from openclaw.admin_new_views import (
daily_report_list_view,
daily_report_detail_view,
)
_orig = admin.site.get_app_list # ── Monkey-patch admin.site.get_urls ───────────────────────────────
_orig_get_urls = admin.site.get_urls
def _patched(request, app_label=None): def _new_get_urls():
app_list = _orig(request, app_label) urls = _orig_get_urls()
# Prepend our custom URLs so they take precedence
custom = [
path(
"daily/",
admin.site.admin_view(daily_report_list_view),
name="openclaw_daily",
),
path(
"daily-reports/",
admin.site.admin_view(daily_report_list_view),
name="openclaw_daily_reports",
),
path(
"daily-reports/<str:agent_name>/<int:year>-<int:month>-<int:day>/",
admin.site.admin_view(daily_report_detail_view),
name="openclaw_daily_report_detail",
),
]
return custom + urls
admin.site.get_urls = _new_get_urls
# ── Monkey-patch admin.site.get_app_list ──────────────────────────
_orig_get_app_list = admin.site.get_app_list
def _new_get_app_list(request, app_label=None):
app_list = _orig_get_app_list(request, app_label)
app_list.insert(0, { app_list.insert(0, {
"name": "Daily Reports", "name": "Daily Reports",
"app_label": "openclaw_daily", "app_label": "openclaw_daily",
@@ -26,4 +59,4 @@ class OpenClawDailyConfig(AppConfig):
}) })
return app_list return app_list
admin.site.get_app_list = _patched admin.site.get_app_list = _new_get_app_list