我不知道該怎麼做。我有一個帶有兩個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;
});
}
'dataArray'是否有值?另外,在該視圖中,你如何捕獲表單細節? – karthikr
@karthikr不,dataArray和jQuery沒有任何兩個Selects的值。由於這些元素的.val()是空的,所以jQuery將它們從dataArray中移除。該表單不是問題,因爲request.POST和request.body沒有包含選擇項,所以沒有要捕獲的數據。請求不包括他們,不管我是否使用jQuery,所以無論如何,這兩個選擇都不包含在POST中。 – Shawn