如何使用预保存信号检查Django admin中是否选择了新文件?

2024-05-01 22:07:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有ImageField属性的模型。你知道吗

我使用django管理员更新模型对象,并且在尝试更新对象时上载新图像时,我需要一些东西来删除旧图像。你知道吗

因此,我创建了一个pre_save信号,当用户试图更新模型对象时,它应该从服务器中删除旧的图像文件。你知道吗

问题是:当用户更新对象的属性而不是ImageField属性时,信号仍然会删除本地保存的图像文件。。你知道吗

我怎样才能改变信号删除文件,只有当一个新的文件被选中在django管理?你知道吗

换句话说,我需要检查用户是否在尝试更新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)

Tags: 文件path对象django模型图像if属性
1条回答
网友
1楼 · 发布于 2024-05-01 22:07:38

在尝试了许多方法之后,以下是解决方案:

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

只有在对象更新期间没有上载新文件时,上述代码才会为真。你知道吗

相关问题 更多 >