【问题标题】:Update a Django Filefield with Ajax使用 Ajax 更新 Django 文件字段
【发布时间】:2017-08-25 06:40:44
【问题描述】:

我正在尝试使用 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;
            }

我通过 url 将 pk 传递给视图,因为(如果我错了,请纠正我)但我认为这是指定要更新的正确对象的路径的方法。这是视图:

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。

【问题讨论】:

    标签: jquery python ajax django


    【解决方案1】:

    把你的表格改成这个

    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 %}",
    

    【讨论】:

    • 你不知道你刚刚帮了我多少。非常感谢exprator!
    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2010-12-25
    • 1970-01-01
    • 2012-01-03
    • 2018-03-08
    相关资源
    最近更新 更多