2012-07-31 45 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