我有一个具有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)
答案 0 :(得分:0)
尝试了许多事情之后,这里是解决方案:
if str(photo.path) == str(photo.file):
return
仅当对象更新期间没有新文件上传时,以上代码才适用。