我有一个很长的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('/')
如何在每次用户填写其他输入时将整个测量集保存在后台?
到目前为止,这是我迄今为止所做的。如何使用回调通过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>
我正在使用这个人代码:
答案 0 :(得分:1)
Django在其HttpRequest
对象上提供了一个方便的is_ajax方法,告诉您是否设置了HTTP_X_REQUESTED_WITH
标头。由于自动保存插件使用jQuery.ajax(),因此默认情况下会发送此消息。
请确保您:
或:
您可以在视图中使用它来创建一部分,以适当地处理AJAX请求:
if request.is_ajax():
# TODO: Handle autosave plugin save requests
pass
else:
# this is where the normal stuff you already have happens
...
使用自动保存插件,save callback采用与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!"
}
}
您可以在我上面链接的文档中详细说明大量选项,自动保存插件会直接传递它们,因此您可以告诉它所有相同的事情。
上面的主要内容是发送数据的url
(视图中urls.py
内的任何内容),data
这是您的实际POST
数据将发送(稍后在request.post
词典中找到)以及success
,complete
和error
回调,它们是处理相应条件的函数。
请注意,它将根据服务器响应的HTTP状态代码考虑成功或失败。因此,例如,如果您raise Http404
(不要 - 只是一个示例),它会调用error
,但如果您返回正常HttpResponse
(通常是JSON),它将调用success
。