【发布时间】: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