【问题标题】:How do I check that an image exists and delete it before I add a new image - Django如何在添加新图像之前检查图像是否存在并将其删除 - Django
【发布时间】:2011-07-29 14:48:06
【问题描述】:

我有一个帐户资料的视图。我希望用户在添加图像后能够编辑图像。我有编辑代码。一旦用户编辑了一张图片,它就会将该图片添加到数据库中,但不会删除之前的图片。

所以问题是,我该怎么做:

检查图像是否存在 如果确实删除它 添加新图片

我的观点如下,欢迎提出建议。

@login_required
def profile_img_edit(request, username, id):
'''Edit a Profile Image'''
    messages.success(request, "Your changes were saved!")

    user = get_object_or_404(User, username=username)
    if request.user != user:
        return permission_denied(request)
    profile_img = get_object_or_404(ProfileImage, user=user, id=id)
    if request.method == 'POST':
        form = Profile_ImageEditForm(request.POST, request.FILES, instance=profile_img)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(
                reverse('profile_img', kwargs={
                    'username': request.user.username,
                    'id': profile_img.id}))
    else:
        form = Profile_ImageEditForm()

    return render_to_response('accounts/profile_img_edit.html', {
        'form':form,
        'object':profile_img
    }, context_instance=RequestContext(request))

【问题讨论】:

  • 您实际上是将图像存储在数据库中,还是存储图像文件的路径? ImageField 存储路径。此外,您可以将此功能称为“非破坏性编辑”。风靡一时。 :)
  • 这个想法是将图像实际保存在服务器中,以防万一。但是要从数据库中删除记录。

标签: django django-views


【解决方案1】:

无需添加新的 profile_img 实例,只需更新数据库中的旧实例即可:

ProfileImg.objects.filter(user=user).update(img_path='new_image_path')

不确定您是否已经是,但您应该使用 ForeignKey 将 ProfileImg 模型连接到您的 User 模型。

【讨论】:

  • 我的意思是来自数据库。删除它的记录。它可以留在服务器上,这很好。只要它的记录从数据库中删除。
  • 不错,实际上要简单得多!只需在查询中使用更新方法(修改后的答案以反映)
  • @Dave Merwin 刚刚添加了一个新答案,让我知道这是否适合您。
  • 哦,太棒了。非常感谢!
猜你喜欢
  • 2015-07-11
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多