Download apps/documents/models/audit_log.py from jun2024/fc: direct link, hf CLI and curl.
- Browser
- Download file 2.29 kB
-
https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/documents/models/audit_log.py
- Command line
-
hf download hf://spaces/jun2024/fc/apps/documents/models/audit_log.py
-
curl -L -o audit_log.py https://huggingface.co/spaces/jun2024/fc/resolve/main/apps/documents/models/audit_log.py
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()}" | |