我问这个问题,因为我已经为nested inlines实现了一个javascript解决方案(感觉有点像黑客,但似乎也是当时最简单,最快捷的解决方案......)这给了我一些意想不到的解决方案结果
jQuery在管理表单中添加了额外的输入部分,普通表单提交将忽略(显然),所以我使用jQuery forms plugin就像这样
function ajaxSubmit(form) {
$(form).ajaxSubmit({
success: function() {
var item_data = $('.item-fields').fieldSerialize();
var post_url = '/admin/menu_generator/' + context + '/' + menu_id + 'items/new/';
$.post(post_url, item_data);
};
});
};
ajaxSubmit()和$(选择器).ajaxSubmit是不同的,命名不好,我的道歉。
无论哪种方式,该位代码都会正常提交表单,并且成功执行第二个POST请求,该请求处理jQuery添加的输入。这个我认为,当jQuery输入需要尚未创建的数据库中的东西时,会阻止这个问题。为清楚起见,举例:
用户可以创建部分,每个部分可以包含许多项目。如果用户创建新的部分并添加新项目,而不进行正常的表单提交,则该部分将不在数据库中,因此也无法创建项目!
不幸的是,我的解决方案不起作用。即使在ajaxSubmit之后,在完成所有js代码之后,新的部分实际上并未记录在数据库中 - 这让我感到惊讶,也许有人可以启发我为什么?可能只是表单插件不适合此任务。
编辑::我的代码中出现了语法错误,这就是为什么它无法正常工作......正如您在上面的代码片段中看到的那样,在成功函数的末尾有一个分号,打破了。
答案 0 :(得分:1)
您的表单应包含视图的路径(对于非-ajax帖子):
<form action="/test" method="post" accept-charset="utf-8" id="testform">
jQuery的代码:
$('document').ready(function(){
$("#testform").submit(function(){
$.ajax({
type: "POST",
url: "/test",
data: $(this).serialize(),
success: function(data) {
.....
});
$('#testform')[0].reset();
return false;
}) ...
你的观点:
def test(request):
if request.is_ajax():
name = request.POST.get('message', False)
m = Message(message=name,user_id=request.user)
m.save()
else: ...