跟踪Django模型历史

时间:2015-01-17 18:50:36

标签: python django django-models

我有两个模型PacketItemItem的{​​{1}}模型为many2one relationship。我想跟踪两个模型。 Packet。已删除created/updated/deleted实例的items。什么是解决这个问题的最佳方法。任何第三方应用????我尝试使用Packet model创建已删除的Item Model实例的精确副本,但这是正确的方法???

型号:

包模型:

Django signals

物品型号:

@python_2_unicode_compatible
class Packet(models.Model):
    customer = models.ForeignKey(
        Customer, verbose_name='related customer',
        blank=False, null=False
    )
    created_on = models.DateField(
        verbose_name='packet created on'
    )
    updated_on = models.DateTimeField(
        verbose_name='packet last modified', blank=True
    )
    remark = models.TextField(
        max_length=150, blank=True, null=True
    )
    created_by = models.ForeignKey(
        User, related_name='packet_created_by',
        on_delete=models.SET_NULL, null=True, blank=False
    )
    updated_by = models.ForeignKey(
        User, related_name='packet_updated_by',
        on_delete=models.SET_NULL, null=True, blank=False
    )

对于ItemHistory:

class Item(models.Model):
    name = models.ForeignKey(
        ItemMaster, on_delete=models.PROTECT
    )
    packet = models.ForeignKey(
        Packet, verbose_name='related packet'
    )
    created_on = models.DateField(blank=True)
    updated_on = models.DateField(blank=True)
    remark = models.TextField(
        max_length=150, blank=True
    )
    created_by = models.ForeignKey(
        User, related_name='item_created_by', null=True, on_delete=models.SET_NULL
    )
    updated_by = models.ForeignKey(
        User, related_name='item_updated_by', null=True, on_delete=models.SET_NULL
    )

2 个答案:

答案 0 :(得分:0)

Django-Reversion可能正是您所寻求的。安装应用程序后,您可以标记要添加到reversion的任何模型,然后每次保存模型时,副本都会在还原时保存。然后,您可以使用各种参数查询模型恢复列表。它很酷。

答案 1 :(得分:-1)

找到一个不错的app。这提供了很棒的API,并且在大多数情况下都很有帮助。 喜欢:它提供API来跟踪带有时间戳的插入/更新/删除的实例以及执行它的用户。文档也写得很好。

附加:

audit_log = AuditLog()到现有模型,它会附加这些额外字段以跟踪模型中的更改。

action_id - Primary key for the log entry.
action_date - The point in time when the logged action was performed.
action_user - The user that performed the logged action.
action_type - The type of the action (Created/Changed/Deleted)
Any field of the original X model that is tracked by the audit log.