【问题标题】:When does a submitted django form actually save to the database?提交的 django 表单何时实际保存到数据库中?
【发布时间】:2011-02-15 16:56:08
【问题描述】:

我问这个问题是因为我已经为nested inlines 实现了一个 javascript 解决方案(感觉有点像 hack,但当时似乎也是最简单和最快的解决方案......)这给了我一些意想不到的结果。

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() 和 $(selector).ajaxSubmit 不同,命名错误,我很抱歉。

无论哪种方式,那段代码都会正常提交表单,成功后会执行第二个 POST 请求,该请求会处理 jQuery 添加的输入。 我认为,当 jQuery 输入需要数据库中尚未创建的内容时,这将防止出现问题。为清楚起见,举个例子:

用户可以创建部分,每个部分可以有许多项目。如果用户创建了一个新部分并添加了新项目,那么在没有先进行普通表单提交的情况下,该部分将不会在数据库中,因此也无法创建项目!

很遗憾,我的解决方案不起作用。即使在 ajaxSubmit 之后,直到完成所有 js 代码之后,新的部分实际上也没有记录在数据库中 - 这让我感到惊讶,也许有人可以告诉我为什么?可能只是表单插件不适合这个任务。

EDIT :: 我的代码中存在语法错误,这就是它不起作用的原因...正如您在上面的 sn-p 中看到的那样,成功函数的末尾有一个分号,这是破坏的东西。

【问题讨论】:

    标签: jquery django


    【解决方案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: ...
    

    【讨论】:

    • 不完全。完美的标准 ajax 表单提交 - 但我的解决方案需要更多。我基本上是通过单击完成两个表单提交,使事情进一步复杂化,我没有使用标准表单按钮,我忘了提及(我使用了一个链接,这也是为什么一切都感觉非常hackish的另一个原因)。事实证明,它不起作用的真正原因是我没有注意到的一个简单的语法错误。见编辑。
    • 尝试序列化你要提交的数据并先提醒它(只是为了确保它有效)。然后将其提交到视图并保存到相应的对象中。
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多