diff --git a/apps/audits/handler.py b/apps/audits/handler.py index 9d521824b..41fd59c6c 100644 --- a/apps/audits/handler.py +++ b/apps/audits/handler.py @@ -194,7 +194,7 @@ class OperatorLogHandler(metaclass=Singleton): remote_addr = get_request_ip(current_request) if resource_display is None: resource_display = self.get_resource_display(resource) - resource_id = resource.id if resource is not None else '' + resource_id = getattr(resource, 'pk', '') before, after = self.data_processing(before, after) if not force and not any([before, after]): # 前后都没变化,没必要生成日志,除非手动强制保存 diff --git a/apps/audits/migrations/0021_alter_operatelog_resource_id.py b/apps/audits/migrations/0021_alter_operatelog_resource_id.py new file mode 100644 index 000000000..9dadae738 --- /dev/null +++ b/apps/audits/migrations/0021_alter_operatelog_resource_id.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2023-02-01 06:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('audits', '0020_auto_20230117_1004'), + ] + + operations = [ + migrations.AlterField( + model_name='operatelog', + name='resource_id', + field=models.CharField(blank=True, db_index=True, default='', max_length=128, verbose_name='Resource'), + ), + ] diff --git a/apps/audits/models.py b/apps/audits/models.py index 86c7597a7..93fb6733b 100644 --- a/apps/audits/models.py +++ b/apps/audits/models.py @@ -53,7 +53,7 @@ class OperateLog(OrgModelMixin): resource_type = models.CharField(max_length=64, verbose_name=_("Resource Type")) resource = models.CharField(max_length=128, verbose_name=_("Resource")) resource_id = models.CharField( - max_length=36, blank=True, default='', db_index=True, + max_length=128, blank=True, default='', db_index=True, verbose_name=_("Resource") ) remote_addr = models.CharField(max_length=128, verbose_name=_("Remote addr"), blank=True, null=True) diff --git a/apps/audits/signal_handlers.py b/apps/audits/signal_handlers.py index d5da3d1f7..2f209e09b 100644 --- a/apps/audits/signal_handlers.py +++ b/apps/audits/signal_handlers.py @@ -136,10 +136,12 @@ def on_object_pre_create_or_update(sender, instance=None, raw=False, using=None, ) if not ok: return + # users.PrivateToken Model 没有 id 有 pk字段 instance_id = getattr(instance, 'id', getattr(instance, 'pk', None)) instance_before_data = {'id': instance_id} raw_instance = type(instance).objects.filter(pk=instance_id).first() + if raw_instance: instance_before_data = model_to_dict(raw_instance) operate_log_id = str(uuid.uuid4())