Django-追踪评论

时间:2019-03-01 15:03:16

标签: python django django-models

我正在构建一个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)

因此,对于发生的每个事件,我都需要一个新的入口,并在文本字段中提供描述。

2 个答案:

答案 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”重命名为“生日”。