首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在所有django模型中记录所有保存/更新/删除操作

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

Stack Overflow用户
提问于 2016-06-26 17:39:24
回答 1查看 2.5K关注 0票数 4

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

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

第二种方法是方面/装饰师。我想python/django一定有这样的东西,但我不知道具体是什么:)

请给我提供最合适的方法来做这个日志记录。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-26 18:37:32

你可以为你的模型写一个混音。

代码语言:javascript
复制
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

现在就用在你的模型里吧。

代码语言:javascript
复制
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中检查它们。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38041310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档