2

I have two models. One called MainModel and other called HistoricMainModel. I would like to INSERT automatically a row in the HistoricMainModel every time I data is inserted to MainModel. What is best/correct way of doing this in Django?

Best Regards,

4

3 回答 3

9

如果您已经有一些自定义save()的 .-magic 正在进行,我建议您使用最适合您的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保存您的信号时都会触发此信号。

文档在这里

于 2013-03-01T10:41:40.470 回答
2

您可以自己实现它,但最好的方法是使用执行此操作的应用程序 - 例如reversion- 自动实现模型历史记录/回滚的 django 应用程序。

除了您将实施的任何内容外,reversion还将为您提供:

  1. 与管理后端集成。
  2. 用于将元数据添加到您的版本并恢复到模型的先前版本的API

它更加灵活,并且被广泛使用和实施。

于 2013-03-01T11:01:09.740 回答
2

在调用“真实”方法之前,重写saveMainModel 模型中的方法以创建和插入 HistoricMainModel 对象save

于 2013-03-01T10:37:47.350 回答