2016-06-18 80 views
0

我的小项目有问题。基本上,我的网站将有用户帐户,他们每个人都允许图像上传到服务器(可以说像一个画廊)。很明显,我不希望所有的图像都出现在一个文件夹中,所以我实现了它,以便每个用户的图像只能到各自的目录。Django快速文件删除

问题是,虽然用户可以上传,但我不知道如何制作,以便他们可以删除这些文件。

表“ImageDoc”有一列“imgfile”,它存储文件的名称。

view.py

def image_galleria(request): 
    LOCATION = request.user.username + "/" 

    if request.method == 'POST': 
     form = ImgDocForm(request.POST, request.FILES) 

     if form.is_valid(): 
      origin_form = form.cleaned_data["user_file"] 
      origin_name = origin_form.name 
      new_name = origin_name.split('.')[0] + ".jpg" 
      original_file = os.path.join(settings.MEDIA_ROOT+LOCATION, new_name) 

      original_name = ImageDoc(user_id=user_details.id, imgfile=new_name) 
      original_name.save() 

代码工作上面,这样可以节省用户的相应目录。然而...

view.py

@login_required(login_url='sign_in') 
def delete_image(request, image_id): 
    imagex = ImageDoc.objects.get(id=image_id) 
    LOCATION = request.user.username + "/" 
    imagex.imgfile.delete(LOCATION) 

    return HttpResponse("Yes! Deleted file!") 

我试过各种连击 “.delete()”,这是行不通的。任何想法我做错了什么?

回答

0

如果你想删除的文件刚刚拿到file对象,并删除它...在你的情况应该是

imagex.delete() 
+0

感谢您的回复。它不工作虽然如此。但此作品: 'imagex.imgfile.delete()' 但我的问题是,删除功能不是删除用户的目录内的文件,只是一般的MEDIA目录。 – Bob

0

我想我解决它通过其他方法。对于未来的参考:

views.py

@login_required(login_url='sign_in') 
def delete_image(request, image_id): 
    imagex = ImageDoc.objects.get(id=image_id) 

    imgfile = settings.MEDIA_ROOT + request.user.username + "/" + imagex.imgfile.name 
    os.remove(imgfile) 

    imagex.imgfile.delete() 
    imagex.delete() 

    return HttpResponseRedirect(reverse('image_galleria')) 

相当粗糙的解决方案,但它的作品,我想。谢谢!