2013-05-13 73 views
0

我在django中創建了一個基本文件應用程序,以便客戶端可以上傳文件並複製相關網址並將其用於網站內容。應用程序的想法之一是,一旦條目被刪除,該文件將從服務器中刪除,以幫助清除空間並保持服務器整潔。移除條目後從服務器刪除文件

但是,當我添加一個條目(文件)它上傳到正確的目錄。但是,當我刪除它的文件仍然在服務器上。有沒有辦法可以刪除文件以及條目(文件)。

下面是代碼:

from django.db import models 

def get_upload_to(instance, filename):   
    if instance.file_type == 'Image': 
     return "images/filesApp/%s" % filename 
    elif instance.file_type == 'PDF': 
     return "pdf/filesApp/%s" % filename 

    return "filesApp/%s" % filename 

class File(models.Model): 
    title = models.CharField(max_length=400, help_text="Enter the title of the file, this will appear on the listings page") 
    CATEGORY_CHOICES = (
     ('Image', 'Image'), 
     ('PDF', 'PDF') 
    ) 
    file_type = models.CharField(choices=CATEGORY_CHOICES, help_text="Please select a file type", max_length=200) 
    file_upload = models.FileField(upload_to=get_upload_to) 

謝謝!

+0

在您檢索條目的文件系統路徑後,您是在「os.remove」後面嗎? – 2013-05-13 16:17:39

+0

對我來說可能是相當新的,所以你必須詳細說明,對不起!我認爲它像.remove()但不知道我如何定位上傳的文件。 – JDavies 2013-05-13 16:19:00

+0

你可以發佈你如何處理刪除?有很多方法可以刪除文件,這是一個:https://docs.djangoproject.com/en/dev/ref/files/file/#django.core.files.File.delete – 2013-05-13 16:19:07

回答

1

只是覆蓋車型delete方法:

import os 
class File(models.Model): 
    title = models.CharField(max_length=400, help_text="Enter the title of the file, this will appear on the listings page") 
    CATEGORY_CHOICES = (
     ('Image', 'Image'), 
     ('PDF', 'PDF') 
    ) 
    file_type = models.CharField(choices=CATEGORY_CHOICES, help_text="Please select a file type", max_length=200) 
    file_upload = models.FileField(upload_to=get_upload_to) 

    def delete(self, *args, **kwargs): 
     path=self.file_upload.path 
     os.remove(path) 
     super(File,self).delete(*args, **kwargs) 

這將只刪除實體,不與bulk_delete。如果要處理這些管理視圖中,你必須創建這樣一個默認的admin動作:

from django.contrib import admin 
from models import * 


def delete_selected(modeladmin, request, queryset): 
    for element in queryset: 
     element.delete() 
delete_selected.short_description = "Delete selected elements" 

class FileAdmin(admin.ModelAdmin): 
    model = File 
    actions = [delete_selected] 

    list_display = ('title', 'file_type') 

admin.site.register(File, FileAdmin) 

希望它能幫助!

+0

我確實給過這樣一個旋風,但沒有任何運氣。 – JDavies 2013-05-13 16:37:13

+0

爲什麼不能?發生了什麼? – 2013-05-13 16:48:25

+0

沒有什麼,沒有提出任何錯誤。正常上傳文件。然後當我刪除條目,文件留在文件夾中。 – JDavies 2013-05-13 16:50:25