提交的django表单何时实际保存到数据库?

时间:2011-02-15 16:56:08

标签: jquery django

我问这个问题,因为我已经为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代码之后,新的部分实际上并未记录在数据库中 - 这让我感到惊讶,也许有人可以启发我为什么?可能只是表单插件不适合此任务。

编辑::我的代码中出现了语法错误,这就是为什么它无法正常工作......正如您在上面的代码片段中看到的那样,在成功函数的末尾有一个分号,打破了。

1 个答案:

答案 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: ...