2012-01-18 23 views
0

Djangoの管理サイトを使用してファイルをアップロードするアプリケーションがあります。私は別の関数で使用できるようにファイルのURLを返す必要があります。このプロセスは、アプリケーションによって保存されたファイルではなく、元のファイルの名前を取得できるという事実を別にして、うまく動作します。たとえば、アップロードするファイルの名前がsomefile.xxxで、djangoがsomefile_1.xxxという名前を付けて保存する場合、somefile.xxxがすでにサーバー上に存在するため、somefile_1.xxxを返すことはできませんが、元のファイル名を取得しています。これは私のコードです。アップロードされたファイルのURLをdjangoの管理者に取得する

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がファイルの名前を変更した可能性を考慮する必要があります。

関連する問題