django - 使用 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 不变?
谢谢!
解决方案
我已经创建了一个额外的字段来存储我设置为“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)
推荐阅读
- python - 如何提取所有价格并给出最小值?JSON 请求
- .net - 如何在 Visual Studio 中加载缺失的系统符号文件
- javascript - 如何正确传递 Javascript 属性,以便它们可以被函数修改
- asp.net - 回发时“找不到指定的 URL”-asp.net windows 身份验证
- c++ - 在 pthread 中取消引用结构指针
- regex - 正则表达式匹配具有特定数量或更少分隔符的所有行
- java - Spring集成聚合内存泄漏
- cassandra - Cassandra:LOCAL_QUORUM 与 QUORUM,当所有数据中心/服务器在物理上是本地的,在同一个 10gbps 网络上
- javascript - React Native Styles:多个 StyleSheet.create() 与引用包含所有样式的外部对象之间的性能差异
- c# - C# 使用 Exchange 命令行管理程序 (Exchange 2016) 创建新邮箱