0

我究竟如何使用 ajax 调用上传文件?我在模板中的表格

<form action="images/" enctype="multipart/form-data" method="POST" class="upload">                                            
    <table>
        {{ form.as_table }}
        <td><input type = "button" onclick="" value="Upload" id = "test"/</td>
    </table>
</form>

我的 jQuery 函数:

$(document).ready(function(){
    $("#test").click(function(){
        var string = $("form.upload").serialize();
        alert(string);
        $.ajax({
            url :'/test/',
            type:'post',
            data: {datas:string},  
        dataType: "json",           
         success: function(response) {
                    alert(response);
                  }
        });
    });
});

我的观点 :

@csrf_exempt        
def test(request):
    if request.is_ajax():
        form = ImageUploadForm(request.POST)
        if form.is_valid():
            form.save()
        return HttpResponse("Saved !!!!")

在这里,我有文件上传的视图,但文件没有出现在 django 视图的表单变量中。我应该怎么做才能在视图中获取文件?该表单有一个用于上传的文件字段。它是一种模型形式。

4

1 回答 1

4

这里缺少 2 个重要部分:

  1. jQuery.serialize() 不对文件字段做任何事情。查看jQuery 表单插件,了解通过 Ajax 发布带有文件的表单的可靠方法
  2. 您需要将上传的文件显式传递给表单构造函数:form = ImageUploadForm(data=request.POST, files=request.FILES)
于 2012-12-18T07:58:18.110 回答