我需要的基本上是一个带版本控制的数据库模型。因此,每次修改/删除记录时,数据都不会丢失,并且可以撤消更改。
我一直试图用这样的东西来实现它:
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本身,或者至少会有一个很好的文档包,但我找不到任何。
答案 0 :(得分:0)
我觉得你可以解决你的问题,不是通过修改你的模型,而是修改访问它们的逻辑。
因此,您可以为同一个对象设置两个模型:一个可以作为您的暂存区域,您可以在其中存储您提到的值,例如time_created
,time_modified
和{ {1}}或其他人。从那里,在您的视图的代码中,您将浏览该表并根据您的设计选择您想要/需要的记录并存储在最终表中。
答案 1 :(得分:0)
当我听到模型和Django的版本控制时,我立即想到django-reversion。
然后,如果要访问实例的版本而不是实际实例,只需使用版本模型。
from reversion.models import Version
versions = Version.objects.get_for_object(instance)