2013-05-16 36 views
1

我不知道該怎麼做。我有一個帶有兩個ModelMultipleChoiceField字段的django表單。它們在網頁中正確顯示,並在「選擇」中顯示正確的對象作爲選項。我使用它們爲組分配權限,就像django管理站點一樣。問題是,當我使用jquery攔截提交,並在表單上調用serializeArray()時,表單中的兩個Select元素將從返回的數據中移除,因爲元素的val()爲null(jquery-1.9.1 .js,第7321行)。Django ModelMultipleChoiceField在使用jquery.post時從POST中消除了

形式:

class GroupUpdateForm(forms.Form): 
    group_id = forms.IntegerField(label='', required=False) 
    avail_perms = forms.ModelMultipleChoiceField(queryset=Permission.objects.none(), \ 
              label='Available Permissions') 
    assign_perms = forms.ModelMultipleChoiceField(queryset=Permission.objects.none(), \ 
              label='Assigned Permissions') 
    name = forms.CharField(label='Group Name', required=True) 

    def __init__(self, *args, **kwargs): 
     self.group = kwargs.pop('group', None) 
     super (GroupUpdateForm, self).__init__(*args, **kwargs) 

     has_perms = self.group.permissions.all() 
     self.fields['assign_perms'].queryset = self.group.permissions.all() 
     self.fields['avail_perms'].queryset = Permission.objects.all().exclude(id__in=has_perms) 

我的JavaScript目前是非常基本的,追查問題:

function saveGroupPermissions() { 
    var dataArray = $('#groupEditForm').serializeArray(); 
    $.post('/sdc/admin/editGroup/' + parseInt($('#group_id').text()) + '/', dataArray, function(data){ 
     return true; 
    }); 
} 

什麼是我的選擇,或者我怎麼能阻止我的選擇被去除,從而我可以發佈他們?

編輯: 剛試過沒有jQuery,同樣的事情正在發生。常規提交從POST和正文中刪除兩個ModelMultipleChoiceField選擇。我哪裏錯了?

編輯2: 我試圖迫使dataArray中,包括像這樣(更新JavaScript文件)選擇價值,但同時dataArray中現在包括對添加的權限的對象

"["chargeback | category | Can add category"]" 

當它到達查看,request.POST不包含該對象。

function saveGroupPermissions() { 
    var dataArray = $('#groupEditForm').serializeArray(); 

    //get all the added permissions and the removed permissions 
    var added = $('.assignedPerm.added') 
    var addedNames = new Array(); 
    if (added.length > 0) { 
     for (var i=0; i < added.length; i++){ 
      addedNames.push(added[i].innerHTML); 
     } 
    } 
    var jAdded = JSON.stringify(addedNames); 
    var addedData = { 
     name:'addedData', 
     value:jAdded 
    } 

    dataArray.push(addedData); 

    $.post('/sdc/admin/editGroup/' + parseInt($('#group_id').text()) + '/', dataArray, function(data){ 
     return true; 
    }); 
} 
+0

'dataArray'是否有值?另外,在該視圖中,你如何捕獲表單細節? – karthikr

+0

@karthikr不,dataArray和jQuery沒有任何兩個Selects的值。由於這些元素的.val()是空的,所以jQuery將它們從dataArray中移除。該表單不是問題,因爲request.POST和request.body沒有包含選擇項,所以沒有要捕獲的數據。請求不包括他們,不管我是否使用jQuery,所以無論如何,這兩個選擇都不包含在POST中。 – Shawn

回答

0

看起來,因爲選項元素沒有被選中,所以select並沒有給POST任何值,不管是不是jQuery。我有添加或移除選項元素被選擇

$('.added').prop('selected', true); 
$('.removed').prop('selected', true); 

一旦我這樣做,一切工作正常發力,通過jQuery的。

相關問題