使用jquery.post时,Django ModelMultipleChoiceField从POST中删除

时间:2013-05-16 15:15:40

标签: jquery django django-forms

我不知道如何处理这个问题。我有一个带有两个ModelMultipleChoiceField字段的django表单。它们在网页中正确显示,正确的对象作为选择中的选项。我使用它们为组分配权限,就像django管理站点那样。问题是,当我用jquery拦截submit,并在窗体上调用serializeArray()时,表单中的两个Select元素将从返回的数据中删除,因为元素的val()为null(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;
    });
}

1 个答案:

答案 0 :(得分:0)

似乎由于未选择选项元素,因此select不会给POST任何值,无论是否jQuery。我必须通过jQuery强制添加或删除要选择的选项元素

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

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