2012-05-03 19 views
0

私はupload_toパスを指定したImageField()を持っています。そして、それはMEDIA_ROOTのURLに保存されます。しかし、アップロードされたファイルを他のファイル名に変更したい。アップロードしたファイルのファイル名を変更する方法は?

私はそれをforms.pyやmodels.pyから行うべきですか?それをアーカイブするにはsave関数をオーバーライドすべきですか?

forms.py

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

答えて

3

直接ImageFieldアバターのupload_toでそれをカスタマイズします。

通常、それは

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