2012-07-31 90 views
0

我做的东西覆盖已经与上传文件删除旧模式的对象:覆盖了一个文件,如果文件存在

class OverwriteStorage(FileSystemStorage): 
def get_available_name(self, name): 
    if self.exists(name): 
     os.remove(os.path.join(settings.MEDIA_ROOT, name)) 
    return name 

但我的文件是在一个模型:

class Work (models.Model): 
    file = models.FileField(storage=OverwriteStorage(), upload_to=path) 
    group = models.ForeignKey(Group, related_name='work_list') 

而新的上传使得一个新的输入,所以我有:

  • 一个没有文件的模型(当我问file.size时,该错误)

  • 我的新模式

如何删除我的模型时,我的文件被删除?

我试图再次改变FileSystemStorage过程,但我不能使用任何参数(说在文档和测试了几个小时;)),我也试图改变保存过程,但我没有成功..

回答

0

我的解决办法:

for work in groupwork : #It is the list of work associate with my group 
    try : 
     path = work.file.path.lstrip(SITE_ROOT+'/'+MEDIA_ROOT+'/').rstrip(request.FILES['file'].name) 
     deletedwork = groupwork.get(file=path+request.FILES['file'].name) 
     deletedwork.delete() 
    except: 
     pass 
0

有几件事情继续排查前检查:

  • 你有没有设置在settings.py文件的MEDIA_ROOT和MEDIA_URL?
  • 检查这个link更多信息的管理文件
  • 我会趁Django的built-in file storage,而不是从头开始构建的东西
+0

MEDIA_ROOT和MEDIA_URL都OK – nlassaux 2012-07-31 17:25:18

+0

我我试图做出最小的变化,我很好:D – nlassaux 2012-07-31 17:37:17