2 回答

TA貢獻1812條經驗 獲得超5個贊
class HorseTracker(models.Model):
horse = models.ForeignKey(Horse, on_delete=models.CASCADE, related_name='horse')
comment = models.CharField(max_length=128)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['-created_at']
每次更改模型中的某些內容時,您都可以創(chuàng)建新實例,HorseTracker并描述您所做的更改。
為了使它更有用TabularInline,您可以在您的HorseAdmin
class HorseTrackerInline(admin.TabularInline):
model = HorseTracker
class HorseAdmin(admin.ModelAdmin):
list_display = ['name', 'nacimiento', 'nro', 'event', 'slug', ]
inlines = [ HorseTrackerInline, ]

TA貢獻1815條經驗 獲得超6個贊
如果你想跟蹤各種模型,我建議使用類似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”重命名為“生日”,以保持用英語命名所有字段的一致性。
添加回答
舉報