假设我有我的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)
答案 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
信号