在Django中实现持​​久数据模型的最佳方法是什么?

时间:2018-01-30 13:48:23

标签: python django database django-models

我需要的基本上是一个带版本控制的数据库模型。因此,每次修改/删除记录时,数据都不会丢失,并且可以撤消更改。

我一直试图用这样的东西来实现它:

from django.db import models

class AbstractPersistentModel(models.Model):
    time_created = models.DateTimeField(auto_now_add=True)
    time_changed = models.DateTimeField(null=True, default=None)
    time_deleted = models.DateTimeField(null=True, default=None)

    class Meta:
        abstract = True

然后每个模型都会继承AbstractPersistentModel

问题是,如果我覆盖save()delete()以确保它们实际上没有触及现有数据,我仍然会留下原始对象,而不是新版本。

在尝试提供干净,安全且易于使用的解决方案几个小时之后,我放弃了。

是否有某种方法可以实现这个并非压倒性的功能?

似乎普遍的问题是我认为它会被内置到Django本身,或者至少会有一个很好的文档包,但我找不到任何。

2 个答案:

答案 0 :(得分:0)

我觉得你可以解决你的问题,不是通过修改你的模型,而是修改访问它们的逻辑。

因此,您可以为同一个对象设置两个模型:一个可以作为您的暂存区域,您可以在其中存储您提到的值,例如time_createdtime_modified和{ {1}}或其他人。从那里,在您的视图的代码中,您将浏览该表并根据您的设计选择您想要/需要的记录并存储在最终表中。

答案 1 :(得分:0)

当我听到模型和Django的版本控制时,我立即想到django-reversion

然后,如果要访问实例的版本而不是实际实例,只需使用版本模型。

from reversion.models import Version

versions = Version.objects.get_for_object(instance)