문제

파일 필드가있는 모델이있는 Django와 함께 응용 프로그램을 구현하고 있습니다.

class Slideshow(models.Model):
    name = models.CharField(max_length=30,unique=True)
    thumbnail = models.FileField(max_length=1000,upload_to="images/app/slideshows/thumbnails")

Django가 모델을 관리하는 관리자 백엔드가 있습니다. 방금 admin.py 파일을 추가했고 django는 모든 것을 관리합니다.

from django.contrib import admin

from apps.gallery.models import Slideshow

admin.site.register(Slideshow)

백엔드에서 슬라이드 쇼를 추가, 삭제 및 업데이트 할 수 있습니다. 그러나 슬라이드 쇼를 업데이트하고 속성 썸네일 [파일 필드]을 변경하려고 할 때 Django는 이전 파일을 삭제하지 않습니다. 결과적으로 여러 업데이트 후 서버에는 쓸모없는 많은 파일이 채워집니다. 내 질문은 : 업데이트 후 Django 해당 파일을 자동으로 삭제할 수있는 방법은 무엇입니까?

나는 당신의 도움에 정말 감사하겠습니다

도움이 되었습니까?

해결책

Django가 디자인으로 이것을 할 것이라고 확신합니다. 예를 들어 다른 모델이 해당 파일을 사용하고 있는지 여부는 알 수 없습니다. 파일이 남아있을 것으로 예상하고 Django가 삭제했다는 것을 알게된다면 정말 놀랄 것입니다!

그러나 파일 필드를 변경하자마자 이전 파일 이름을 잃어버린 문제도 있습니다.

그 문제에 대한 오픈 티켓이 있습니다. http://code.djangoproject.com/ticket/11663

패치가 있습니다 http://code.djangoproject.com/ticket/2983 이는 무시하는 방법을 보여줍니다 __set__ 이전 파일 이름을 저장합니다. 그런 다음 모델의 것입니다 __save__ 메소드는 이전 파일 이름에 액세스하여 삭제할 수 있습니다.

다른 팁

나는이 문제에 대해 많이 생각했고 결국 나는 나에게 잘 작동하는 것보다 해결책을 발견했다. Project에서 모든 모델을 찾을 수 있으며 pre_save 및 post_delete 신호를 연결할 수 있습니다.

결국 나는이 문제를 슬로프하는 앱을 만들었습니다. Django-cleanup

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top