如何使用 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
只有在对象更新期间没有上传新文件时,以上代码才会成立。
我有一个具有 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
只有在对象更新期间没有上传新文件时,以上代码才会成立。