django - 上传新图片时如何不删除默认图片?
问题描述
我编写了在用户上传新头像时删除旧用户头像的代码。问题是,如果用户有默认头像并决定更改它,默认图像会被删除。
这是我的代码:
@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)
解决方案
可能在删除旧图像之前,只需检查图像 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)
请务必检查默认图像的路径
推荐阅读
- c# - 找不到位图
- amazon-web-services - 我可以从 AWS WorkSpace 访问 localhost
- c# - 调用的目标已引发异常。System.ArgumentNullException:文本不能为空参数名称:文本(Selenium)
- php - 如何为应用内购买实现实时通知(Pub/Sub)?
- html - 当我添加另一个 div 时,div 元素就消失了
- bert-language-model - 来自转换器的 BERT 句子嵌入
- amazon-web-services - AWS EMR 上的 Hive 端口
- java - org.apache.taglibs.standard.util.XmlUtil 部署时的 NoClassDefFoundError
- windows - 使用 SetWindowsHookEx 注入的 DLL 被意外卸载
- python - 如何替换二维列表数组中所有出现的项目