2013-09-24 4 views
1

Предположим, я выбираю 10 файлов для загрузки с помощью django-filer. Первоначально у них очень случайные имена. Я хотел бы иметь набор правил, согласно которым их следует переименовать и только затем передать для дальнейшей обработки (миниатюры и т. Д.).Django. Как программно переименовать файлы, загруженные с помощью django-filer

Мне нужно на самом деле переименовать все, особенно имя файла, а не только название модели.

Я попытался поймать сигнал pre_save для модели изображения и изменить instance.original_filename, но это не переименование имени файла. Или, может быть, я должен подклассировать и переопределить что-то из пакета filer?

Буду благодарен за пример кода, потому что это немного сложно для меня.

ответ

1

Я использовал form_valid(self, form) в views.py для обработки и обработки изображений. Полный код немного долго и очень специфичен, но я выложу несколько 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

Смежные вопросы