我有两个型号。一个名为MainModel,另一个名为HistoricMainModel。每次将数据插入MainModel时,我都希望在HistoricMainModel中自动插入一行。在Django中这样做的最佳/正确方法是什么?
最诚挚的问候,
答案 0 :(得分:8)
如果你已经有了一些自定义的save()
.-魔法,我会建议使用post_save()
信号或pre_save()
,这对你来说最合适。
在models.py
@receiver(pre_save, sender=MainModel)
def save_a_historicmodel(sender, **kwargs):
#do your save historicmodel logic here
或
def save_a_historicmodel(sender, instance, created, **kwargs):
print "Post save was triggered! Instance:", instance
signals.post_save.connect(save_a_historicmodel, sender=MainModel)
这样做是为了每次保存MainModel
时都会触发此信号。
答案 1 :(得分:2)
在MainModel模型中重写save
方法,以在调用“真实”save
方法之前创建并插入HistoricMainModel对象。
答案 2 :(得分:2)
您可以自己实现,但最佳方式是使用执行此操作的应用程序 - 例如reversion
- 一个实现模型历史记录/自动回滚的django应用程序。
除了您要实施的任何内容之外,reversion
还会为您提供:
它更灵活,被广泛使用和实施。