【问题标题】:Django ajax fileupload integrated to a model formDjango ajax 文件上传集成到模型表单
【发布时间】:2012-06-24 07:55:37
【问题描述】:

我最近一直致力于为我的小型博客网站实施ajax based file uploader。我还有一个小表单(与 ajax 文件上传器在同一页面上),它收集姓名、电子邮件 ID 等基本详细信息。现在,我面临的问题是,当用户通过 ajax 上传器上传文件时并完成表格,我无法获得上传文件的“文件名”。

基本上,我想将 ajax 上传中的文件名写到我的表单字段中。上传本身工作正常,我也可以通过萤火虫看到 POST 消息。所以,我可以看到一些 JSON,例如:

{
  "path": "/media/uploads/paperscience_5055721894547287.pdf", 
  "success": true, 
  "filename": "paperscience_5055721894547287.pdf"
}

我想将“路径”参数放入名为文件名的表单字段中。

我的 django 代码是here

我将不胜感激任何指导以实现上述目标。

【问题讨论】:

    标签: django json jquery django-forms django-views


    【解决方案1】:

    在您的响应函数中:

    将文件名添加到表单文件名字段(假设该字段具有 id: id_filenames):

    $('#id_filenames').val(responseJSON.path);
    

    如果您想重新提交,您可以在包含文件名的表单中添加一些隐藏字段。只需将隐藏字段附加到表单,当用户提交时,这将成为您的 POST 数据的一部分。

    【讨论】:

    • 我的模型有字段“filenames = models.CharField(max_length=100,null=True, blank=True)”,我向它发出“exclude = ('filenames',)”,这样它就可以了不在我的模板上渲染。我已从“#id_filenames”更改为“#filenames”,但我没有看到我的发布请求中记录了文件名。当您说“只需将隐藏字段附加到表单并且用户提交时,这将成为您的 POST 数据的一部分”,您能解释一下我如何实现这一点吗?非常感谢。
    • 您可以使用 jQuery 向表单添加隐藏字段。如果您希望使用 POST 键文件名提交该字段,那么只需执行以下操作:$('#form_id').append('<input type="hidden" name="filenames" value="'+responseJSON.path+'">') 这里 form_id 是您的表单 id,您应该添加一个以便 jQuery 可以更快地找到它。这个块应该进入你的回调函数。所以完整的块看起来像:if(responseJSON.success) { $('#form_id').append('<input type="hidden" name="filenames" value="'+responseJSON.path+'">'); });
    • 当你说“这里 form_id 是你的表单 id,你应该添加一个以便 jQuery 可以更快地找到它”你到底是什么意思?我没有所谓的“form_id”,我想知道我应该在这里使用什么(?)。
    • 在表单中添加一个 id,因为它没有。您需要在表单中添加 id="form_id" 或任何其他 id。像
    猜你喜欢
    • 2014-04-11
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2021-09-19
    • 2015-03-21
    • 2013-09-08
    • 2012-09-20
    • 2012-10-12
    相关资源
    最近更新 更多