【问题标题】:sorl-thumbnail not deleting parent file or cache when entry is deleted删除条目时,sorl-thumbnail 不删除父文件或缓存
【发布时间】:2011-06-28 02:57:16
【问题描述】:

我不确定我做错了什么。但删除该条目时,上传的文件及其相关缓存不会被删除。

我有一个内联属性模型的照片模型,其中包含从照片模型到属性模型的 FK。我正在使用“from sorl.thumbnail import ImageField”来替换默认的 Django models.ImageField。

在 Django Admin 中,当我删除照片的条目时,该条目会被删除,但该条目的文件不会被删除。我正在使用 Django 的 runserver 进行开发,但没有看到任何错误。根据我的阅读,如果条目被删除,这些文件应该被删除,除非还有对它们的引用。我看到的唯一参考是在 thumbnail_kvstore 表中。

有人对我缺少什么有任何想法吗?

【问题讨论】:

    标签: django django-models sorl-thumbnail


    【解决方案1】:

    delete_file 方法只会在 Django sorl.thumbnail.ImageField文件、缩略图和键值存储引用(由sorl缩略图使用)的最佳方法是使用sorl.thumbnail.delete函数:sorl.thumbnail.delete(self.photo)

    【讨论】:

      【解决方案2】:

      来自sorl.thumbnailImageField 应该是django 的FileField 的扩展

      来自release notes of django 1.2.5

      在早期的 Django 版本中,当删除包含 FileField 的模型实例时,FileField 会自行从后端存储中删除文件。这为几种潜在的严重数据丢失情况打开了大门,包括回滚事务和引用同一文件的不同模型上的字段。在 Django 1.2.5 中,FileField 永远不会从后端存储中删除文件。如果您需要清理孤立文件,则需要自己处理(例如,使用可以手动运行或计划通过例如 cron 定期运行的自定义管理命令)。

      【讨论】:

      • 根据sorl中的ImageField,它是FileField的扩展。但是,它确实定义了一个 delete_file 方法,该方法声明它应该删除文件。问题是它似乎并没有自己调用它。可能是因为你刚才指出的。所以我想我想知道,我可以使用这种方法吗?如果是这样,最好的使用方法是什么?
      • 我能够使用 delete 属性获得有效的解决方案。 `def delete(self): delete(self.photo) super(PropertyPhotos, self).delete()
      【解决方案3】:

      我遇到了 django-filebrowser 的问题,当您用新的图像替换图像时,缓存的文件没有更新。所以就我而言,这不是 sorl-thumbnail 的问题,而是 django-filebrowser 的问题。 sorl 只会在文件路径更改时重新绘制缩略图。为了解决这个问题,我将文件浏览器的 FILEBROWSER_OVERWRITE_EXISTING 设置为 False。

      FILEBROWSER_OVERWRITE_EXISTING = False
      

      如果他们不使用 django-filebrowser,这至少可以帮助某人调试问题。但在 django-filebrowser 的情况下,这是要走的路。干杯。

      【讨论】:

        猜你喜欢
        • 2011-07-01
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多