| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from django.db import models
- from django.utils import timezone
- class OperationLog(models.Model):
- OPERATION_LEVELS = (
- ('view', '查看'),
- ('update', '更新'),
- ('new', '新增'),
- ('delete', '删除'),
- ('download', '下载'),
- ('login', '登录'),
- ('logout', '登出'),
- ('other', '其他'),
- )
-
- OPERATION_RESULTS = (
- ('success', '成功'),
- ('failure', '失败'),
- )
-
- # 操作者信息 - 使用TextField存储用户名或标识
- operator = models.TextField(
- null=True,
- blank=True,
- verbose_name='操作者'
- )
- operation_content = models.TextField(verbose_name='操作内容')
- operation_level = models.CharField(
- max_length=20,
- choices=OPERATION_LEVELS,
- verbose_name='操作级别'
- )
- operation_result = models.CharField(
- max_length=10,
- choices=OPERATION_RESULTS,
- default='success',
- verbose_name='操作结果'
- )
- operation_time = models.DateTimeField(default=timezone.now, verbose_name='操作时间')
-
- # 请求信息
- ip_address = models.GenericIPAddressField(null=True, blank=True, verbose_name='IP地址')
- user_agent = models.TextField(null=True, blank=True, verbose_name='用户代理')
- request_method = models.CharField(max_length=10, null=True, blank=True, verbose_name='请求方法')
- request_path = models.CharField(max_length=500, null=True, blank=True, verbose_name='请求路径')
-
- # 业务信息
- module_name = models.CharField(max_length=100, default='unknown', verbose_name='模块名称')
- object_id = models.CharField(max_length=100, null=True, blank=True, verbose_name='操作对象ID')
-
- class Meta:
- verbose_name = '操作日志'
- verbose_name_plural = '操作日志'
- ordering = ['-operation_time']
- db_table = 'operation_log'
- indexes = [
- models.Index(fields=['operation_time']),
- models.Index(fields=['operator', 'operation_time']),
- models.Index(fields=['module_name', 'operation_time']),
- ]
-
- def __str__(self):
- return f"{self.operator} - {self.operation_content} - {self.operation_time}"
|