N Nova Admin Developer Docs
مستندات Nova Admin توسعه KPIها، نمودارها و داده‌های dashboard.

گزارش‌دهی و چارت‌ها

هدف گزارش‌دهی

Dashboard صفحه اصلی علاوه بر کارت‌های app، اطلاعات تحلیلی سریع از وضعیت admin ارائه می‌دهد:

  • تعداد اپ‌ها
  • تعداد مدل‌ها
  • تعداد مدل‌های قابل افزودن
  • فعالیت‌های اخیر admin
  • روند فعالیت ۷ روز اخیر
  • توزیع مدل‌ها بین اپ‌ها
  • ترکیب اکشن‌ها: افزودن، تغییر، حذف

فایل‌های درگیر

فایل نقش
templatetags/jazzmin.py تولید داده گزارش با dashboard_report_data
templates/admin/index.html markup گزارش‌ها و چارت‌های SVG
static/jazzmin/css/main.css ظاهر cards، chartها و responsive layout
locale/fa/LC_MESSAGES/django.po ترجمه متن‌های گزارش‌دهی

داده گزارش‌ها

تابع اصلی:

@register.simple_tag
def dashboard_report_data(app_list):
    ...

ورودی app_list همان appهایی است که Django Admin با permission کاربر ساخته است. بنابراین گزارش permission-aware است.

Summary

خروجی summary:

{
    "apps": len(apps),
    "models": model_count,
    "addable": addable_count,
    "viewable": viewable_count,
    "model_density": model_density,
    "coverage": coverage,
    "add_coverage": add_coverage,
}

Activity trend

از LogEntry برای ۷ روز اخیر استفاده می‌شود:

entries = LogEntry.objects.filter(action_time__gte=start).only("action_time", "action_flag")

سپس برای هر روز count ساخته و به points SVG تبدیل می‌شود:

trend_points = [
    {"x": ..., "y": ..., "count": ..., "date": ..., "label": ...},
]

Action mix

اکشن‌ها بر اساس flagهای Django Admin محاسبه می‌شوند:

ADDITION
CHANGE
DELETION

برای donut chart از conic-gradient استفاده می‌شود:

donut_gradient = "conic-gradient(...)"

چرا chart library نداریم؟

برای جلوگیری از dependency و conflict، چارت‌ها SVG/CSS native هستند. مزایا:

  • بدون CDN
  • بدون Bootstrap
  • بدون React/Chart.js
  • سریع و قابل کنترل
  • مناسب admin dashboard سبک

اضافه کردن چارت جدید

1. تولید داده

در dashboard_report_data خروجی جدید اضافه کن:

"my_chart": {
    "items": [...],
    "max": ...,
}

2. markup در index.html

<article class="nova-report-card nova-chart-card">
    <header class="nova-chart-head">
        <div>
            <span class="nova-report-label">{% trans 'My chart' %}</span>
            <h3>{% trans 'Readable Persian title' %}</h3>
        </div>
    </header>
    ...
</article>

3. CSS در main.css

.nova-my-chart { ... }
.nova-my-chart-item { ... }

4. ترجمه

متن‌ها را در django.po اضافه و compile کن.

بهبودهای پیشنهادی آینده

  • فیلتر بازه زمانی dashboard: ۷ روز، ۳۰ روز، ۹۰ روز
  • تفکیک فعالیت‌ها بر اساس user
  • نمایش top models by activity
  • cache کردن داده dashboard برای پروژه‌های بزرگ
  • افزودن permission جدا برای مشاهده گزارش‌ها
  • خروجی CSV ساده از گزارش‌ها

نکات performance

برای پروژه‌های بزرگ، Query به LogEntry را محدود نگه دار:

.only("action_time", "action_flag")

اگر گزارش‌ها سنگین شد، از cache استفاده کن:

from django.core.cache import cache

کلید cache باید user-aware یا permission-aware باشد تا کاربر داده غیرمجاز نبیند.