2017-08-25 98 views
0

我試圖用Ajax更新現有對象的FileField。一個WAV BLOB在瀏覽器中創建的,我想通過追加到一個FORMDATA實例來傳遞:使用Ajax更新Django Filefield

var data = new FormData(); 
      data.append('sound', blob); 


$.ajax({ 
      url: "{% url 'posts:update_audio' instance.pk %}", 
      type: 'POST', 
      data: data, 
      cache: false, 
      processData: false, 
      contentType: false, 
      success: function(data) { 
       alert('success'); 
       } 
      }); 
      return false; 
      } 

我傳遞的PK通過URL的觀點,因爲如果(指正我錯了),但我認爲這是指定要更新的正確對象的路徑的方式。這是看法:

def update_audio(request,pk): 
    form = UpdateAudio(request.POST or None, request.POST or None) 
    if request.method == 'POST': 


     if form.is_valid(): 
      instance = form.save(commit=False)  
      instance.save() 


    return HttpResponseRedirect('/') 

我剛剛像對待任何其他視圖提交表單。我有點困惑這應該如何更新特定的對象,這導致我的問題:我應該使用一個特殊的視圖,如UpdateView?如果是這樣,我該如何執行它?如果沒有,任何人都知道我要去哪裏錯了?當我嘗試提交表單時,我目前剛剛得到內部服務器錯誤500。

回答

2

您的形式改變這一

instance = get_object_or_404(MyModel, id=pk) 
form = MyUpdateAudioForm(request.POST or None,request.FILES, instance=instance) 

和Ajax的URL

url: "{% url 'posts:update_audio' pk=instance.pk %}", 
+0

你不知道你有多少隻是幫了我。非常感謝exprator! –

+0

哈哈。我的快樂兄弟,我可以幫助@AdamMizell :) – Exprator