我不知道该怎么处理这个。我有一个带有两个 ModelMultipleChoiceField 字段的 django 表单。它们在网页中正确显示,并且正确的对象作为 Select 中的选项。我使用它们为组分配权限,就像 django 管理站点一样。问题是,当我用 jquery 拦截提交,并在表单上调用 serializeArray() 时,表单中的两个 Select 元素从返回的数据中删除,因为元素的 val() 为空(jquery-1.9.1 .js,第 7321 行)。
表格:
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 包含这样的 Select 值(更新的 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;
});
}