2011-02-15 96 views
0

我問這個問題,因爲我已經實施了一個JavaScript解決方案到nested inlines(感覺有點像黑客,但似乎是當時最簡單和最快的解決方案...),這給了我一些意想不到的結果。什麼時候提交的django表單實際保存到數據庫中?

的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不同,嚴重命名,我的歉意。

無論哪種方式,該位代碼正常提交表單,並在成功執行處理jQuery添加輸入的第二個POST請求。這,我認爲,將防止當jQuery輸入需要在數據庫中還沒有創建的東西的問題。爲了清楚起見,一個例子:

用戶可以創建部分,每個部分可以有很多項目。如果用戶創建一個新的部分並添加新的項目,而沒有進行正常的表單提交,那麼該部分將不會在數據庫中,因此這些項目也不能創建!

不幸的是,我的解決方案不起作用。即使在ajaxSubmit之後,新的部分在完成所有js代碼之後纔會實際記錄在數據庫中 - 這讓我感到驚訝,也許有人可以啓發我爲什麼?這可能只是表單插件不適合這個任務。

編輯::我的代碼中有一個語法錯誤,這就是爲什麼它不工作......正如你可以在上面的代碼片段中看到的,在成功函數的末尾有一個分號,這是破壞的東西。

回答

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: ... 
+0

不太。完美的標準ajax表單提交 - 但我的解決方案需要更多一點。我基本上只做一次點擊就做兩次表單提交,使事情進一步複雜化,我沒有使用標準的表單按鈕,我忘了提及(我使用了一個鏈接,這是所有事情都覺得非常黑客的另一個原因)。事實證明,它沒有工作是一個簡單的語法錯誤,我沒有注意到。請參閱編輯。 – 2011-02-16 10:57:29

相關問題