如何使用 pre_save 信号检查是否在 django admin 中选择了新文件?

How to check if a new file was selected in django admin using a pre_save signal?

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

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

所以我创建了一个 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)

以下是经过多次尝试后的解决方案:

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

只有在对象更新期间没有上传新文件时,以上代码才会成立。