2017-08-25 56 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