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

时间:2016-06-26 17:39:25

标签: django python-3.x django-models

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

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

第二种方式是方面/装饰器。我想,python / django必须有这样的东西,但我不知道究竟是什么:)

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

1 个答案:

答案 0 :(得分: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

现在只需在您的模型中使用它。

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

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