2012-05-03 2 views
0

У меня есть ImageField(), где я указал путь upload_to. И он работает, это сохраняет адрес MEDIA_ROOT. Однако я хочу изменить загруженный файл на другое имя файла.Как изменить имя файла в загруженном файле?

Должен ли я сделать это с помощью форм.py или с models.py, а также должен ли я переопределить функцию сохранения для ее архивирования?

forms.py

class UserAvatarForm(forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     fields = ('avatar',) 
    def __init__(self, *args, **kwargs): 
     super(UserAvatarForm, self).__init__(*args, **kwargs) 

ответ

3

Настроить его в upload_to из ImageField аватара непосредственно.

Обычно это выглядит как

def upload_to(instance, filename): 
    import os.path 
    # get extension from raw filename 
    fn, ext = os.path.splitext(filename) 
    new_filename = ... 
    # return new filename, including its parent directories (based on MEDIA_ROOT) 
    return "path/{new_filename}{ext}".format(new_filename=new_filename, ext=ext) 

Вы можете ввести новое имя в new_filename линии, зависит от instance или filename или любых других строк, имеет смысл. Это возможно даже name the file by instance.pk

+0

Я сохраняю его аргумент 'filename'. Но я не мог понять, как его использовать. Не могли бы вы привести небольшой пример того, как его использовать? – starcorn

+0

@starcorn, пожалуйста, проверьте http://stackoverflow.com/questions/10088693/how-save-filename-of-uploaded-file-in-model/10089200#10089200 и http://stackoverflow.com/questions/9968532/django. -admin-file-upload-with-current-model-id – okm

+0

@starcorn обновил ответ также – okm

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