Если вы хотите отслеживать различные модели, я бы предложил использовать что-то вроде django-simple-history , чтобы отслеживать изменения в вашей модели.
Добавление поля history
в модель позволяет сохранить все изменения, внесенные в поля, а затем получить доступ к истории.Если вы хотите добавить пользовательское сообщение, вы можете добавить поля в историческую модель , и в сигнале установить сообщение.
from simple_history.models import HistoricalRecords
class MessageHistoricalModel(models.Model):
"""
Abstract model for history models tracking custom message.
"""
message = models.TextField(blank=True, null=True)
class Meta:
abstract = True
class Horse(models.Model):
name = models.CharField(max_length=255)
birthdate = models.DateField(blank=True, null=True)
nro = models.IntegerField()
event = models.TextField()
slug = models.SlugField(unique=True)
history = HistoricalRecords(bases=[MessageHistoricalModel,])
Затем, используя сигналы , выможно получить изменения, используя diff , а затем сохранить собственное сообщение с указанием изменений и внесения изменений.
from django.dispatch import receiver
from simple_history.signals import (post_create_historical_record)
@receiver(post_create_historical_record)
def post_create_historical_record_callback(sender, **kwargs):
history_instance = kwargs['history_instance'] # the historical record created
# <use diff to get the changed fields and create the message>
history_instance.message = "your custom message"
history_instance.save()
Вы можете сгенерировать довольно общий сигнал, который будет работать для всех ваших моделей, отслеживаемых с помощью поля «история».
Примечание: я переименовал «nacimiento» в «дату рождения», чтобы сохранить последовательностьв названии всех полей на английском языке.