使用Ajax更新Django文件字段

时间:2017-08-25 06:40:44

标签: jquery python ajax django

我试图更新现有对象'使用Ajax的FileField。在浏览器中创建了一个wav blob,我试图通过将它附加到FormData实例来传递它:

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传递到视图,因为(如果我错了,请纠正我),但我认为这是指定要更新的正确objectt的路径的方法。以下是观点:

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。

1 个答案:

答案 0 :(得分:2)

将您的表单更改为此

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

和ajax网址

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