使用Reversion应用程序(DJANGO)时如何从辅助模型还原文件

时间:2019-04-29 10:20:01

标签: django django-models django-reversion

我有2个型号:

Model1(models.Model):

and 

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

我做了一个附加字段,用于存储我设置为“ set_null”的foreighkey id和on_delete 而且我在模型中更改了delelete方法,以便在还原时尝试恢复模型时将触发“保存”方法,并从内存字段中填充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)