我有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完整?
谢谢!
答案 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)