2013-07-15 2 views
2
에 파일을 업로드

나는 파일을 삭제하려면 다음 코드를 :삭제 장고

그것은 내가 내 views.py에서 그것을 물어 개체를 삭제하는 관리
from django.db import models 
from django import forms 
import os 

class Document(models.Model): 
    docfile = models.FileField(upload_to='documents/%Y/%m/%d') 
    def __unicode__(self): 
     return '%s' % (self.docfile.name) 
    def delete(self, *args, **kwargs): 
     os.rmdir(os.path.join(settings.MEDIA_ROOT, self.docfile.name)) 
     super(Document,self).delete(*args,**kwargs) 

하지만 같은 이름의 파일을 다시 업로드 할 때 "output.txt"대신 "output_1.txt"를 얻을 것이므로 원본 파일이 여전히 존재하는 것처럼 보입니다.

def delete_matrix(): 
    documents = Document.objects.all() 
    documents.delete() 

나는 데이터베이스에서 파일을 삭제하지 오전 :

내가 삭제하는 데 사용하는 코드입니다? 어떤 도움을 주시면 감사하겠습니다.

답변

4

문제는 모델에서 delete() 메서드를 재정의하지만 기본 관리자 (Documents.object.all(). delete())가 반환 한 QuerySet에서 delete 메서드를 호출한다는 것입니다. 이것들은 2 개의 분리 된 방법이므로 이것을 고치는 2 가지 방법이 있습니다. 모델의 삭제 방법 1.In

os.remove(os.path.join(settings.MEDIA_ROOT, self.docfile.name)) 

하여 광고

os.rmdir(os.path.join(settings.MEDIA_ROOT, self.docfile.name)) 

를 교체하고, 각각 개별적으로 오브젝트의 삭제 메소드를 호출한다. 삭제() 메소드를 오버라이드 (override) 사용자 정의 검색어 세트를 반환하는

documents = Document.objects.all() 
for document in documents: 
    document.delete() 

2.Replace 기본 관리자에 의해

Document.objects.all().delete() 

교체합니다. 이것은 Overriding QuerySet.delete() in Django에 설명되어 있습니다.

+0

아니요 예외는 없었습니다. os.remove가 오류를 수정하지 못했습니다. – user2569766

+0

우리는 같은 대답으로 끝났다! 이 어젯밤을 고쳤고 나는 delete 메소드를 오버라이드해서는 안된다는 것을 깨달았다. 나는 document.delete() 뒤에 os.remove (...)를 추가했다. – user2569766