首页 > 解决方案 > 使用 Reversion 应用程序 (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 支持跨表完整性保护。那也是合理的。如果我使用 SET_NULL ,那么 Reversion 将无法正确恢复图像,因为它显然会丢失外键 ID。问题是如何通过 Reversion 在 Model1 的数据中恢复 Model2 的关联图像,或者如果我使用 CASCADE 之外的东西以便不从文件系统中删除图像,则保持 Model2 图像的外键 ID 不变?

谢谢!

标签: djangodjango-modelsdjango-reversion

解决方案


我已经创建了一个额外的字段来存储我设置为“set_null”的前键 id 和 on_delete 我已经在模型中更改了删除方法,因此当恢复尝试恢复模型时,它会触发“保存”方法并且 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)

推荐阅读