from django.contrib.auth.models import User from django.contrib.admin.models import LogEntry from django.db.models.signals import post_save from django.dispatch import receiver
# 这里只记录Device模型的变化 # @receiver(post_save, sender=Device) @receiver(post_save) deflog_save(sender, instance, created, **kwargs): print("sender: ", sender) action = 'CREATE'if created else'UPDATE' print("current request in kwargs: ", kwargs) # current request in kwargs: {'signal': <django.db.models.signals.ModelSignal object at 0x10b73d490>, 'update_fields': None, 'raw': False, 'using': 'default'} request = kwargs.get('requqest') print("instance: ", instance) print("current request in kwargs: ", request)
MIDDLEWARE = [ # ... Other midddleware 'threadlocals.middleware.ThreadLocalMiddleware', ]
3、在然后使用 threadlocals中的 `get_current_request`
可以获取Django 后台的request,这个request中包括当前登录的user
```python from django.db.models.signals import post_save from django.contrib.auth import get_user_model from django.contrib.auth.models import AnoymousUser from django.dispatch import receiver
from threadlocals.threadlocals import get_current_request
@receiver(post_save, sender=Device) deflog_save(sender, instance, created, **kwargs): if sender in [SysUser, Device]: request = get_current_request() if request: user = request.user else: user = AnonymousUser() action = 'CREATE'if created else'UPDATE' data = str(instance.__dict__) CustomLogEntry.objects.create(user=user, model_name=sender.__name__, model_pk=instance.pk, action=action, data=data)