首页 > 解决方案 > 上传新图片时如何不删除默认图片?

问题描述

我编写了在用户上传新头像时删除旧用户头像的代码。问题是,如果用户有默认头像并决定更改它,默认图像会被删除。

这是我的代码:

@receiver(pre_save, sender=Profile)
def delete_file_on_change(sender, instance, **kwargs):
if instance.pk:
    try:
        old_image = Profile.objects.get(pk=instance.pk).image
    except Profile.DoesNotExist:
        return
    new_image = instance.image
    if old_image and old_image.url != new_image.url:
        old_image.delete(save=False)

我试过这个:

@receiver(pre_save, sender=Profile)
def delete_file_on_change(sender, instance, **kwargs):
    if instance.image.url == '/media/default.jpg':
        ...

但它不起作用,因为由于print(instance.image.url)某种原因,它返回的不是/media/default.jpg 新上传文件的 url。

另外,这是我的看法:

def update_user(request):
    if request.method == 'POST':
        if 'edit_profile' in request.POST:
            profile_form = UpdateProfileForm(request.POST or None, request.FILES, instance=request.user.profile)
            if profile_form.is_valid():
                profile_form.save()
                return redirect('editprofile')
    profile_form = UpdateProfileForm(instance=request.user.profile)
    context = {'ps_form': password_form, 'u_form': user_info_form, 'pr_form': profile_form}
    return render(request, 'update_user.html', context=context)

标签: django

解决方案


可能在删除旧图像之前,只需检查图像 url 是否不是默认的。

例子

if old_image and old_image.url not in (new_image.url, '/media/default.jpg'):
        old_image.delete(save=False)

或者

if old_image and old_image.url != new_image.url and old_image.url != '/media/default.jpg':
        old_image.delete(save=False)

请务必检查默认图像的路径


推荐阅读