【发布时间】:2023-04-04 19:03:01
【问题描述】:
我有一个包含对象的表单:
<form method="post" class="object_form" id="event-core-form" action="{% url save_event_core_data event.id %}" enctype="multipart/form-data">
{{ form.as_p }}
<p>
<input class="object-submit" id="object-data-save" type="submit" value="Save data">
</p>
</form>
点击“提交”按钮后,我正在运行此脚本,该脚本通过 ajax 提交我的表单、更新数据并返回更新后的表单,该表单将被插入到原来的位置:
$("#object-data-save").livequery("click", function(e) {
e.preventDefault();
$(this).parents("form:first").ajaxSubmit({
data: {"action": action},
"success": function(data) {
data = JSON.parse(data);
$("#core-data").html(data["html"]);
$("#message").show();
$("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function () {
$("#message").hide();
});
}, 1500);
}
});
return false;
});
这会运行以下函数:
def event_core_data(request, event_id):
template_name="management/core_event.html"
event = Event.objects.get(pk=event_id)
form = EventForm()
if request.method == "POST":
form = EventForm(instance=event, data=request.POST)
message = _("Error saving data")
if form.is_valid():
form.save()
message = _(u"Data saved.")
html = render_to_string(template_name, RequestContext(request, {
"form" : form,
"event" : event,
}))
result = simplejson.dumps({
"html" : html,
"message" : message,
}, cls = LazyEncoder)
result = HttpResponse(result)
logging.debug(result)
else:
form = EventForm(instance=event)
result = ""
try:
result = render_to_string(template_name, RequestContext(request, {
"form" : form,
"event" : event,
}))
except:
pass
return result
保存后一切都按预期工作。但是在第三次更新后,我的表单没有插入到父模板中。相反,我被重定向到编辑函数的 url,并且表单呈现为原始 html。另外,我在萤火虫中注意到,当我被重定向时 - 没有发送 POST 并且我的 javascript 中的虚拟“警报”没有被触发。 这是显示初始状态的函数(如果有帮助的话):
def manage_event(request, event_id,):
template_name = 'management/edit_event.html'
try:
event = Event.objects.get(pk=event_id)
except DoesNotExist:
url = reverse("manage_events")
return HttpResponseRedirect(url)
return render_to_response(template_name, RequestContext(request, {
"core_data" : event_core_data(request, event_id),
"event" : event,
}))
编辑
这是此项目的测试链接,您可以在其中查看正在发生的事情。 'event_core_data' 在成功更新后将 request.POST 返回到控制台。
http://ntt.vipserv.org/manage/events/2
我也想知道为什么我的日期选择器小部件在提交后消失了。这些东西是否以某种方式联系在一起?
编辑 2
我已经尝试使用 .post 或 .ajax 代替 .ajaxSubmit 但没有任何运气。
【问题讨论】:
-
因此,由于某种原因,在第二次更新表格后不再作为邮件发送。这怎么可能,有什么想法吗?
-
我强烈推荐使用 1) Firefox,2) Firebug。启用 Firebug,然后重新加载页面。查看控制台以查看确切服务器返回的内容。断点也很有用。
-
id='object-data-save"
-
别告诉我noobdy知道如何解决这个问题... :(
标签: jquery ajax django django-forms xmlhttprequest