使用 Reversion 应用程序 (DJANGO) 时如何从二级模型恢复文件

How to restore files from secondary model when using Reversion app (DJANGO)

我有 2 个模型:

Model1(models.Model):

and 

Model2(models.Model):
fk = models.ForeignKey("Model1",  on_delete=models.CASCADE)
image  = models. ImageField(…..)

我使用 Reversion 应用程序恢复所有已删除的数据,并且两个模型都在管理中使用版本管理注册。它可以工作,但是当我恢复 model1 的任何条目时,它不会从 Model2 的 Imagefield 恢复实际文件。这是合理的,因为它们被 CASCADE 删除了。如果我设置 on_delete = DO_NOTHING,它会增加完整性错误,因为 Postgree 支持跨 table 完整性保护。这也是有道理的。如果我使用 SET_NULL ,那么 Reversion 将无法正确恢复图像,因为它显然会丢失外键 ID。 问题是如果我使用 CASCADE 之外的东西以便不从文件系统中删除图像,如何通过 Reversion 在 Model1 的数据中恢复 Model2 的关联图像或者保持 Model2 图像的外键 ID 完整?

谢谢!

我创建了一个额外的字段来存储外键 ID,on_delete 我设置为 "set_null" 而且我在模型中更改了删除方法,这样当恢复尝试恢复模型时它会触发 "save" 方法并且 fk id 将从内存字段中填充。



    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        if self.boat and not self.memory:
            self.memory = self.boat_id
        elif not self.boat and self.memory:
            self.boat_id = self.memory
        elif self.boat and self.memory and self.boat_id != self.memory:
            self.memory = self.boat_id
        models.Model.save(self, force_insert=False, force_update=False, using=None,
                          update_fields=None)