Python 如何使用来自ajax调用的数据在POST请求中填充django表单?

Python 如何使用来自ajax调用的数据在POST请求中填充django表单?,python,jquery,ajax,django,django-forms,Python,Jquery,Ajax,Django,Django Forms,在用户点击提交按钮后,我通过ajax调用发送表单数据,然后在我的视图中处理该请求,但表单是空的。如何填充表单 这是我的代码: 我的JS文件: var csrftoken = getCookie('csrftoken'); //getCookie is a csrf_token generator var form = $(this).closest('form') $.ajax({ url: form.attr("action"), data: {

在用户点击提交按钮后,我通过ajax调用发送表单数据,然后在我的视图中处理该请求,但表单是空的。如何填充表单

这是我的代码:

我的JS文件:

var csrftoken = getCookie('csrftoken');  //getCookie is a csrf_token generator
var form = $(this).closest('form')
$.ajax({
        url: form.attr("action"),
        data: {        // if I change this line to data: form.serialize(), it works fine!
            csrfmiddlewaretoken : csrftoken,
            form: form.serialize(),  
    },
        type: form.attr("method"),
        dataType: 'json',
        success: function (data)
        {
            //Do a bunch of stuff here
        }
})
我的看法:

def task_edit(request, pk):
    task = get_object_or_404(Task, pk=pk)

    if request.method == 'POST':
        task_form = NewTaskForm(request.POST) # This is empty!

    else:
        task_form = NewTaskForm(instance=task) # This for populating the edit modal, works fine!

我没有执行
data:form.serialize()
,因为我需要在ajax请求中发送额外的数据。如何使其工作?

您可以编写以下内容:-

$form_data = $("#idofform").serialize();
然后是ajax

data : $form_data+'&key=value',
您可以使用诸如使用AJAX捕获表单数据之类的服务

如果您已经在使用JavaScript框架,希望添加验证逻辑,或者不希望在用户提交表单后重定向用户,那么这可能是一个好主意

您可以使用标准AJAX请求提交到FormKeep。为了确保请求不会导致重定向,请确保将Accept头设置为application/javascript

根据以下表格:

<form id="newsletter-signup" action="http://formkeep.com/f/exampletoken" method="POST" accept-charset="UTF-8">
    <input type="hidden" name="utf8" value="✓">
    <input name="email" type="email">
    <input value="Submit" type="submit">
</form>

就这样。一旦您的数据被安全地捕获到FormKeep中,您就可以轻松地将其存储、管理或连接到1000多个其他系统,如Google Docs、Hubspot和Mailchimp。

您如何知道
form:form.serialize()
有效?因为在我的视图中,在if条件下,执行
引发异常(任务表单)
显示带有填充字段的表单。这意味着js form.serialize()不起作用,它实际上发送表单,但不发送填充字段在我尝试此实现之前,我使用了
数据:form.serialize()
,一切正常!我现在需要发送submit按钮值和数据,这就是我面临的挑战和需要帮助的地方FormKeep可能会在这里提供帮助,但您还没有回答所询问的部分,即如何填充以前由ajax提交的表单。
$(function() {
   $('#newsletter-signup').submit(function(event) {
event.preventDefault();

var formEl = $(this);
var submitButton = $('input[type=submit]', formEl);

$.ajax({
  type: 'POST',
  url: formEl.prop('action'),
  accept: {
    javascript: 'application/javascript'
  },
  data: formEl.serialize(),
  beforeSend: function() {
    submitButton.prop('disabled', 'disabled');
  }
}).done(function(data) {
  submitButton.prop('disabled', false);
});
});
});