2012-01-18 94 views
0

我有一個應用程序,使用Django的管理站點上傳文件。我需要返回文件的url,以便它可以被另一個函數使用。除了我能夠獲取原始文件的名稱而不是由應用程序保存的文件這一事實以外,該過程工作得很好。例如,如果要上傳的文件名爲somefile.xxx,並且django將其保存爲somefile_1.xxx,因爲服務器上已存在somefile.xxx,我無法返回somefile_1.xxx,但我正在創建原始文件名。這是我目前的代碼。在Django管理站點獲取上傳文件的URL admin

admin.py

def add_view(self, request, form_url="", extra_context=None): 
     ... 

     ModelForm = self.get_form(request) 
     if request.method == 'POST': 
      form = ModelForm(request.POST, request.FILES) 
      if form.is_valid(): 
       url = MEDIA_URL+'files/'+request.FILES['filename'].name 
       url = iri_to_uri(url) 
       title = form.cleaned_data['title'] 
       name = request.FILES['filename'].name 
       newname = os.path.splitext(request.FILES['filename'].name)[0] 
       data = utils.convert(url, title, newname) 
       print data 

     return super(FileAdmin, self).add_view(request, form_url="", extra_context=extra_context) 

解決方案:

def save_model(self, request, obj, form, change): 

     ... 

     obj.save() 

     url = obj.video.url 

     title = obj.title 

     newname = str(obj.id) 

     data = utils.convert(url, title, newname) 
     print data 

回答

1

add_view是預先保存 - 所以文件應該在內存中,因此不應該設置文件名。

你需要重寫ModelAdmin.save_model並在調用obj.save()之後訪問文件來說明django重命名文件的可能性。