如何将django视图与jquery autosave一起使用?

如何将django视图与jquery autosave一起使用?,jquery,django,Jquery,Django,我有一个很长的表单集显示在页面上。它当前按如下方式保存: if request.method == 'POST': survey_formset = SurveyFormset(request.POST) if survey_formset.is_valid(): ss = SurveySet() ss.user=request.user ss.save() for form in survey_formset.

我有一个很长的表单集显示在页面上。它当前按如下方式保存:

if request.method == 'POST':

    survey_formset = SurveyFormset(request.POST)

    if survey_formset.is_valid():
        ss = SurveySet()
        ss.user=request.user
        ss.save()
        for form in survey_formset.forms:
            saved = form.save(commit=False)
            saved.surveyset = ss
            saved.save()
        return HttpResponseRedirect('/')
我如何使整个surveyset在用户每次填写其他输入时都保存在后台

到目前为止,这就是我目前所拥有的。如何使用回调通过AJAX将内容发送到服务器

    <form action="" method="POST" id="surveyset">{% csrf_token %}
        {{ survey_formset.management_form|crispy }}

        <!--  A lot of inputs!  -->

          {% for form in survey_formset.forms %}
              <hr>
              <div id="survey-{{ forloop.counter }}" class='content'>
                {% crispy form %}
              </div>
          {% endfor %}

        <input id='save_set' type="submit" value="Submit" class='button' />
    </form>

<!-- Time to autosave! -->

<script type="text/javascript" src="{% static "js/jquery.autosave.js" %}"></script>
<script> 
    $(document).ready( function() {

      $("form").autosave({
        callbacks: {
          trigger: ["change", function() {
            var self = this;

            $("#save_set").click(function() {
              self.save();
            });

          }],
          save: {
            method: "ajax",

            // What do I tell the django view? 
            // How do I silently save in the background?

            options: {
              success: function() {
                console.log("saved!");
              }
            }
          }
        }
      });

    }); 
</script>
{%csrf\u令牌%}
{{survey_formset.management_form|crispy}}
{formset.forms%}

{%crispy form%} {%endfor%} $(文档).ready(函数(){ $(“表格”).autosave({ 回调:{ 触发器:[“更改”,函数(){ var self=这个; $(“#保存集”)。单击(函数(){ self.save(); }); }], 保存:{ 方法:“ajax”, //我该怎么告诉django的观点? //如何在后台静默保存? 选项:{ 成功:函数(){ console.log(“已保存!”); } } } } }); });
我正在使用以下代码:

Django在其
HttpRequest
对象上提供了一个方便的方法,告诉您是否设置了带有
头的
HTTP\u X\u请求的\u。由于autosave插件使用,因此默认情况下会发送此消息

只要确保您:

或:

  • 在视图上使用装饰器。(通常不建议这样做,应谨慎使用。)
您可以在视图中使用它来创建适当处理AJAX请求的部分:

if request.is_ajax():
    # TODO: Handle autosave plugin save requests
    pass
 else:
    # this is where the normal stuff you already have happens
    ...
对于autosave插件,采用与jQuery的AJAX方法相同的选项。典型的设置如下所示:

{ url: "http://yourdomain.com/your-view",
  data: {"key_for_server1": var1, "key_for_server2": var2},
  success: function() { 
            // pop up a nice green 'Saved!' message 
  },
  error: function() { 
            // alert "Oh, no! It didn't work!" 
  }
}
在我上面链接的文档中,您可以设置大量的选项,autosave插件会直接传递这些选项,这样您就可以告诉它所有相同的事情

上面的主要功能是将数据发送到的
url
(您可以查看
url.py
中的任何内容),
data
,它是您将发送的实际
POST
数据(稍后在
请求.POST
dict中找到),以及
成功
完成
错误
回调,它们是处理这些各自条件的函数


<>请注意,它将基于服务器响应的HTTP状态代码考虑成败。因此,例如,如果您
引发Http404
(不要——只是一个示例),它将调用
error
,但是如果您返回一个正常的
HttpResponse
(通常是JSON),它将调用
success
,可能是您正在保存表单的子集。关于这一点,我想我想在这里添加几行:
save:{method:“ajax”,选项:{success:function(){console.log(“saved!”;}}}}}}
,以便让我的所有POST数据在后台由视图处理。但是我只想创建一个新的surveyset。那就是你想保存用户输入的所有数据吗?如果是这样,则save comit=False可用于保存部分模型我正在使用commit=False。。。我想做的是修改模板中的视图和javascript,以便使用ajax在后台相互对话。啊,你需要在保存方法中输入URL。url:“/path/to/view”非常感谢!这是一个很大的接受,我会标记为正确后,让它的工作。