记录所有django模型中的所有保存/更新/删除操作

Vit*_*nov 3 django django-models python-3.x

我的django应用程序中有几种型号.其中一些来自models.Model,some - 来自django-hvad的可翻译模型.我想记录它们上的每个保存/删除/更新操作.我知道管理员操作的标准django记录器,但它们太简短且不冗长以满足我的需求.

一般来说,实现此目的的一种常见方法是使用这些操作定义超类并从中扩展每个模型.这不是我的情况,因为我的一些模型是可翻译的,有些则不是.

第二种方式是方面/装饰器.我想,python/django必须有类似的东西,但我不知道到底是什么:)

请为我提供最合适的登录方式.谢谢!

Ian*_*ice 5

你可以为你的模型写一个mixin.

import logging

class LogOnUpdateDeleteMixin(models.Model):
    pass

    def delete(self, *args, **kwargs):
        super(LogOnUpdateDeleteMixin, self).delete(*args, **kwargs)
        logging.info("%s instance %s (pk %s) deleted" % (str(self._meta), str(self), str(self.pk),) # or whatever you like

    def save(self, *args, **kwargs):
        super(LogOnUpdateDeleteMixin, self).save(*args, **kwargs)
        logging.info("%s instance %s (pk %s) updated" % (str(self._meta), str(self), str(self.pk),) # or whatever you like

class Meta:
    abstract = True
Run Code Online (Sandbox Code Playgroud)

现在只需在模型中使用它.

class MyModel(LogOnUpdateDeleteMixin, models.Model):
    ...
    # Update/Delete actions will write to log. Re-use your mixin as needed in as many models as needed.
Run Code Online (Sandbox Code Playgroud)

您可以反复重复使用此mixin.根据需要执行翻译,在模型中设置一些属性并在mixin中检查它们.