fc / apps /documents /models /audit_log.py
jun2024's picture
Upload 2241 files
b4f2238 verified
Raw History Blame Contribute Delete
2.29 kB
"""
法律文书生成系统 - 审计日志模型
本模块定义模板审计日志相关的数据模型.
"""
from __future__ import annotations
from typing import Any, ClassVar
from django.db import models
from django.utils.translation import gettext_lazy as _
from .choices import TemplateAuditAction
class TemplateAuditLog(models.Model):
"""
模板审计日志
记录所有模板相关的修改历史,用于审计追踪.
Requirements: 6.6
"""
id: int
user_id: int # 外键ID字段
CONTENT_TYPE_CHOICES: ClassVar = [
("folder_template", _("文件夹模板")),
("document_template", _("文件模板")),
("placeholder", _("替换词")),
("generation_config", _("生成配置")),
]
content_type = models.CharField(max_length=50, choices=CONTENT_TYPE_CHOICES, verbose_name=_("对象类型"))
object_id = models.PositiveIntegerField(verbose_name=_("对象ID"))
object_repr = models.CharField(max_length=500, verbose_name=_("对象描述"))
action = models.CharField(max_length=20, choices=TemplateAuditAction.choices, verbose_name=_("操作类型"))
changes: Any = models.JSONField(
default=dict, blank=True, verbose_name=_("变更内容"), help_text=_("JSON 格式记录字段变更")
)
user = models.ForeignKey(
"organization.Lawyer", on_delete=models.SET_NULL, null=True, blank=True, verbose_name=_("操作人")
)
ip_address = models.GenericIPAddressField(null=True, blank=True, verbose_name=_("IP地址"))
user_agent = models.CharField(max_length=500, blank=True, verbose_name=_("User Agent"))
created_at = models.DateTimeField(auto_now_add=True, verbose_name=_("操作时间"))
class Meta:
app_label = "documents"
verbose_name = _("模板审计日志")
verbose_name_plural = _("模板审计日志")
ordering: ClassVar = ["-created_at"]
indexes: ClassVar = [
models.Index(fields=["content_type", "object_id"]),
models.Index(fields=["action"]),
models.Index(fields=["user"]),
models.Index(fields=["-created_at"]),
]
def __str__(self) -> str:
return f"{self.get_content_type_display()} #{self.object_id} - {self.get_action_display()}"