fix: add Daily Reports to sidebar via get_app_list override

- 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
This commit is contained in:
ishenwei
2026-04-08 19:42:10 +08:00
parent 721b113c9d
commit 9412e7880d
5 changed files with 36 additions and 32 deletions

View File

@@ -14,6 +14,7 @@ INSTALLED_APPS = [
"django.contrib.humanize", "django.contrib.humanize",
"rest_framework", "rest_framework",
"openclaw", "openclaw",
"openclaw_daily",
] ]
MIDDLEWARE = [ MIDDLEWARE = [

View File

@@ -1,9 +1,10 @@
""" """
Custom AdminSite for OpenClaw — adds Daily Report to sidebar + URLs. Custom AdminSite for OpenClaw — adds Daily Report to sidebar.
Re-registers Session/Message/ToolCall from admin.py, and adds custom report URLs.
""" """
from django.contrib.admin import AdminSite 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 from openclaw.admin_new_views import daily_report_list_view, daily_report_detail_view
@@ -14,7 +15,6 @@ class OpenClawAdminSite(AdminSite):
index_title = "Agent Sessions" index_title = "Agent Sessions"
def get_urls(self): def get_urls(self):
from django.urls import path
urls = super().get_urls() urls = super().get_urls()
custom_urls = [ custom_urls = [
path( path(
@@ -35,15 +35,35 @@ class OpenClawAdminSite(AdminSite):
] ]
return custom_urls + urls return custom_urls + urls
def index(self, request, extra_context=None): def get_app_list(self, request, app_label=None):
extra_context = extra_context or {} """
extra_context["show_daily_report"] = True Inject 'Daily Reports' as a sidebar app item, before the OpenClaw app.
return super().index(request, extra_context) """
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") openclaw_admin_site = OpenClawAdminSite(name="openclaw_admin")
# Re-register models with this custom site (imported from admin.py) # Re-register models with this custom site
from openclaw.admin import SessionAdmin, MessageAdmin, ToolCallAdmin from openclaw.admin import SessionAdmin, MessageAdmin, ToolCallAdmin
from openclaw.models import Session, Message, ToolCall from openclaw.models import Session, Message, ToolCall

View File

@@ -0,0 +1 @@
default_app_config = "openclaw_daily.apps.OpenClawDailyConfig"

View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class OpenClawDailyConfig(AppConfig):
name = "openclaw_daily"
label = "openclaw_daily"
verbose_name = "Daily Reports"

View File

@@ -1,24 +0,0 @@
{% extends "admin/index.html" %}
{% load static %}
{% block branding %}
<h1 id="site-name">
<a href="{% url 'openclaw_admin:index' %}">{{ site_header|default:"Django Admin" }}</a>
</h1>
{% endblock %}
{% block nav-sidebar %}
{{ block.super }}
{# Daily Report custom sidebar item #}
<div class="app-openclaw module">
<table>
<caption>
<a href="{% url 'openclaw_admin:openclaw_daily_reports' %}" class="section">
📊 Daily Reports
</a>
</caption>
</table>
</div>
{% endblock %}