【问题标题】:How to check if a new file was selected in django admin using a pre_save signal?如何使用 pre_save 信号检查是否在 django admin 中选择了新文件?
【发布时间】:2019-02-26 17:56:59
【问题描述】:

我有一个具有 ImageField 属性的模型。

我使用 django 管理员更新模型对象,当尝试更新对象时上传新图像时,我需要一些东西来删除旧图像。

所以我创建了一个pre_save 信号,当用户尝试更新模型对象时,它应该从服务器中删除旧图像文件。

问题是:当用户更新对象的ImageField属性以外的属性时,信号仍然会删除本地保存的图像文件..

只有在 django admin 中选择了新文件时,如何才能更改删除文件的信号?

换句话说,我需要检查用户是否在尝试更新 django admin 中的对象时上传了文件。

重要提示:我的信号适用于许多型号。我需要保持这种状态。

这里是信号代码:

@receiver(pre_save)
def pre_save_image_delete(sender, instance, **kwargs):
    if not valid_model(sender.__name__):
        return

    # Get file path on the server
    path = get_photo_path(sender.__name__, instance.pk)

    # delete the file if it exists
    if path and file_exists(path):
        delete_file(path)

【问题讨论】:

    标签: python django django-forms django-admin django-signals


    【解决方案1】:

    尝试了很多方法后,这里是解决方案:

    if str(photo.path) == str(photo.file):
        return
    

    只有在对象更新期间没有上传新文件时,上述代码才会为真。

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2011-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2016-01-06
      • 2019-08-17
      • 2022-12-30
      相关资源
      最近更新 更多