我正在构建一个Web应用程序,其中每个产品都有其自己的“个人资料”。我需要在模型中添加某种字段,在其中可以添加带有日期和文本的“注释”,以跟踪诸如配方更改,提供者更改,价格更改等信息。
有什么想法吗?
models.py
from django.db import models
# Create your models here.
class Horse(models.Model):
name = models.CharField(max_length=255)
nacimiento = models.DateField(blank=True, null=True)
nro = models.IntegerField()
event = models.TextField()
slug = models.SlugField(unique=True)
def __str__(self):
return '%s-%s' % (self.name, self.nro)
因此,对于发生的每个事件,我都需要一个新的入口,并在文本字段中提供描述。
答案 0 :(得分:0)
403 Forbidden - PUT https://registry.npmjs.org/qdb - You do not have permission to publish "qdb". Are you logged in as the correct user?
每次更改模型中的某些内容时,您都可以创建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']
的新实例并说明所做的更改。
要使其更有用,您可以在HorseTracker
中使用TabularInline
HorseAdmin
答案 1 :(得分:0)
如果您想跟踪各种模型,建议您使用django-simple-history之类的方法来跟踪模型中的更改。
在模型中添加history
字段可让您保存对字段所做的所有更改,然后访问历史记录。如果要添加自定义消息,可以add fields to the historical model,然后在信号中设置消息。
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,])
然后使用signals可以使用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”重命名为“生日”。