"""报表中心模型: - ReportDefinition 报表定义元数据(支持动态多维查询配置) """ from django.db import models from apps.core.base_models import TenantScopedModel class ReportDefinition(TenantScopedModel): """报表元数据定义(支持动态多维分析配置)。""" CATEGORY_CHOICES = [ ("sales", "销售分析"), ("inventory", "库存分析"), ("purchase", "采购分析"), ("finance", "财务往来"), ("comprehensive", "综合经营"), ] code = models.CharField(max_length=64, help_text="报表唯一标识编码") name = models.CharField(max_length=128, help_text="报表名称") category = models.CharField(max_length=32, choices=CATEGORY_CHOICES, default="sales") description = models.CharField(max_length=255, blank=True, default="") is_system = models.BooleanField(default=False, help_text="系统内置预设报表") is_active = models.BooleanField(default=True) # 元数据查询配置: # { # "target_model": "sales.SalesBillLine", # "dimensions": ["product__name", "bill__customer__name"], # "metrics": ["sum_quantity", "sum_amount", "gross_profit"], # "default_sort": "-sum_amount" # } query_config = models.JSONField(default=dict, blank=True, help_text="维度与指标元数据定义") class Meta: db_table = "report_definition" unique_together = [("tenant", "code")] verbose_name_plural = "报表定义" ordering = ["category", "code"] def __str__(self): return f"[{self.get_category_display()}] {self.name} ({self.code})"