重写django admin ,实现将编辑用户权限或组的信息后的操作记录在指定数据库中
时间: 2023-05-27 15:07:55 浏览: 97
重写 Django admin 后,可以通过重写 ModelAdmin 中的 save_model 和 delete_model 方法来实现将编辑用户权限或组的信息后的操作记录在指定数据库中。
在 save_model 方法中,可以使用 Django 的 signals 模块来发送一个信号,然后在 receiver 函数中将操作信息保存到指定的数据库中。例如:
```python
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User, Group
from django.contrib.admin import ModelAdmin
class MyModelAdmin(ModelAdmin):
def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)
if isinstance(obj, User) or isinstance(obj, Group):
post_save.send(sender=obj.__class__, instance=obj, created=change, using='log_db')
@receiver(post_save, sender=User, dispatch_uid="log_user_save")
@receiver(post_save, sender=Group, dispatch_uid="log_group_save")
def log_save(sender, instance, created, **kwargs):
# 将操作信息保存到指定的数据库中
pass
```
类似地,在 delete_model 方法中,也可以发送一个信号,然后在 receiver 函数中将操作信息保存到指定的数据库中。例如:
```python
from django.db.models.signals import pre_delete
from django.dispatch import receiver
from django.contrib.auth.models import User, Group
from django.contrib.admin import ModelAdmin
class MyModelAdmin(ModelAdmin):
def delete_model(self, request, obj):
if isinstance(obj, User) or isinstance(obj, Group):
pre_delete.send(sender=obj.__class__, instance=obj, using='log_db')
super().delete_model(request, obj)
@receiver(pre_delete, sender=User, dispatch_uid="log_user_delete")
@receiver(pre_delete, sender=Group, dispatch_uid="log_group_delete")
def log_delete(sender, instance, **kwargs):
# 将操作信息保存到指定的数据库中
pass
```