1

我不知道该怎么处理这个。我有一个带有两个 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;
    });
}
4

1 回答 1

0

似乎由于未选择选项元素,因此无论是否为 jQuery,选择都没有为 POST 提供任何值。我必须通过 jQuery 强制选择添加或删除的选项元素

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

一旦我这样做,一切正常。

于 2013-05-16T16:35:30.480 回答