2013-12-18 3 views
2

Предположим, что у меня есть модели, определенные в файле Django models.py, как показано ниже.Каков наилучший способ добавления журнала для создания экземпляра модели Django?

Я хотел бы добавить некоторый общий код, чтобы каждый раз, когда создавались экземпляры 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
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) 
+0

работал как шарм. Благодаря! @ bruno-desthuilliers, могу ли я создать аналогичный обратный вызов для удаления этих моделей? –

+0

Вы можете увидеть все доступные сигналы в docs -https: //docs.djangoproject.com/en/dev/topics/signals/ –

+0

В зависимости от ваших требований вам также может быть проще использовать ранее существовавшее приложение для проверки модели Django - https://www.djangopackages.com/grids/g/model-audit/ –

1

Вы можете переопределить метод сохранения и добавить вызов регистратора

или настроить signal receiver и добавить регистратор там.

Если вы думаете, что вы могли бы в конечном итоге расширить эту регистрацию для нескольких моделей может быть проще, чтобы добавить функциональность в качестве приемника сигнала и подписаться на соответствующие модели post_save сигнала

Смежные вопросы