我的django应用程序中有几种型号。其中一些来自models.Model,some - 来自django-hvad的可翻译模型。 我想记录它们上的每个保存/删除/更新操作。我知道管理员行动的标准django记录器,但它们太简短且不冗长,无法满足我的需求。
一般来说,实现这一目标的一种常见方法是使用这些操作定义超类,并从中扩展每个模型。这不是我的情况,因为我的一些模型是可翻译的,有些则不是。
第二种方式是方面/装饰器。我想,python / django必须有这样的东西,但我不知道究竟是什么:)
请为我提供最合适的登录方式。 谢谢!
答案 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中检查它们。