使用Ajax将数据发送到Django模型

问题描述 投票:0回答:2

我创建了以下Ajax请求,以将数据发送到我的views.py。发送请求后,视图应将其保存在我的数据库中。我的实际代码的问题是我在表单中提交的值未保存。

这是我尝试过的:HTML / JS

<script>
$(document).ready(function () {

  $("#test").submit(function (event) {
    $.ajax({
      type: "POST",
      url: "/ajtest/",
      data: { csrfmiddlewaretoken: "{{ csrf_token }}",
            state:"inactive",
        data: $('#test').serialize(),
      },
      success: function () {
        $('#message').html("<h2>Submitted.</h2>")
      }
    });
    return false; 
  });

});
</script>

<form method='post' id='test'>
  {% csrf_token %}
  <input type="text">
  <input type='submit' value='Test button'/>
  <div id='message'>Initial text</div>
</form>

这是view

def ajtest(request):
    if request.method == 'POST':

        model = MyModel()
        model.value = request.POST['data']
        model.user = request.user
        model.save()

        messages.success(request, f"Success!!")

    else:
        messages.success(request, f"Error")
    return HttpResponse('ok')

这里,user正在保存。当我打Ajax表单时,我看到一个新记录出现在数据库中,问题是,在value列中我没有看到表单中提交的数据,但是我会看到一个空白字段或,现在是请求的CSRF令牌。有人可以帮我找到问题吗?我确定它在Ajax请求中。

jquery django ajax post
2个回答
1
投票
来自jquery docs

要让表单元素的值包含在序列化的字符串中,元素必须具有名称属性。

将名称属性添加为,

<form method='post' id='test'> {% csrf_token %} <input type="text" name="value"> <input type='submit' value='Test button'/> <div id='message'>Initial text</div> </form>


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.