2013-09-24 96 views
1

假設我選擇了10個使用django-filer上傳的文件。他們最初有非常隨機的名字。我想有一套規則,根據這些規則,他們應該重新命名,然後才能進行進一步處理(縮略圖等)。Django。如何以編程方式重命名使用django-filer上傳的文件

我需要實際重命名所有內容,特別是文件名,而不僅僅是圖像模型名稱。

我試圖捕捉pre_save信號的圖像模型和更改instance.original_filename但不重命名文件名。或者,也許我應該繼承和重寫Filer包中的某些東西?

我很感激代碼示例,因爲這對我來說有點難。

回答

1

我在views.py中使用了form_valid(self, form)來處理和處理我的圖像。完整的代碼是有點長,很具體,但我會後一些snipplets應顯示如何生成的文件名的想法:

def form_valid(self, form): 
    upload = self.request.FILES['profilbild_original'] #coming from a very simple form 
    self.request.user.student.profilbild_original = upload 
    self.request.user.student.save() 
    #no renaming was required here, but now I did some work: 

    inputfilepath = os.path.join(my_app.settings.MEDIA_ROOT, profilbild_path(self.request.user, str(upload))) 
    original = Image.open(inputfilepath) 
    original.thumbnail((200,200), Image.ANTIALIAS) 
    filename = str(upload)+'.thumbnail_200_200_aa.jpg' 
    filepath = profilbild_path(self.request.user, filename) 
    filepath = os.path.join(my_app.settings.MEDIA_ROOT, filepath) 
    original.save(filepath, 'JPEG', quality=90) 
    self.request.user.student.profilbild = profilbild_path(self.request.user, filename).replace("\\", "/") 
    self.request.user.student.save() 

    return super(ProfilbildView, self).form_valid(form) 

profilbild_path是根據https://docs.djangoproject.com/en/1.3/ref/models/fields/#django.db.models.FileField.upload_to功能:

def profilbild_path(instance, filename): 
    return os.path.join('profilbilder', str(instance.id), filename) 

我希望這給你一些線索。

+0

這個答案有幫助嗎?你需要更多信息嗎? – OBu

+0

恐怕它沒有幫助我。我沒有自己的視圖來處理上傳,我正在使用django-filer。我應該在哪裏放置這個form_valid方法? – gwaramadze

相關問題