添加日志记录以创建Django Model实例的最佳方法是什么?

时间:2013-12-18 18:35:40

标签: python django django-models

假设我有我的Django models.py文件中定义的模型,如下所示。

我想添加一些通用代码,以便每次创建modelA或modelB的任何实例时,都会记录一条如下所示的日志消息:“创建了modelA的实例:Field1 = A1,Field2 = A2” - - 没有任何其他副作用。

我该怎么办?

import logging
logger = logging.getLogger(__name__)


class modelA(models.Model):
    field1 = models.TextField(default="A1")
    field2 = models.TextField(default="A2")
    def __unicode__(self):
        return "Field1 = %s, Field2 = %s" % (self.field1, self.field2)

class modelB(models.Model):
    field1 = models.TextField(default="B1")
    field2 = models.TextField(default="B2")
    def __unicode__(self):
        return "Field1 = %s, Field2 = %s" % (self.field1, self.field2)

2 个答案:

答案 0 :(得分:2)

from django.db.models.signals import post_save
from django.dispatch import receiver


@receiver(post_save)
def log_creation(sender, instance, created, **kwargs):
    if created and isinstance(instance, (ModelA, ModelB)):
        logger.info("created an instance of %s : %s", sender.__name__, instance)

答案 1 :(得分:1)

您可以覆盖保存方法,并添加对记录器的调用

或设置signal receiver并在此处添加记录器。

如果您认为最终可能会将此日志记录扩展到更多模型,则可能更容易将功能添加为信号接收器并订阅相关模型post_save信号