1

これについてどうすればよいかわかりません。2 つの ModelMultipleChoiceField フィールドを持つ django フォームがあります。これらは Web ページに適切に表示され、正しいオブジェクトが [選択] のオプションとして表示されます。django 管理サイトのように、それらを使用してグループにアクセス許可を割り当てます。問題は、jquery で送信を傍受し、フォームで serializeArray() を呼び出すと、要素の val() が null (jquery-1.9.1) であるため、フォームの 2 つの Select 要素が返されたデータから削除されることです。 .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なしで試してみましたが、同じことが起こっています。通常の送信では、2 つの ModelMultipleChoiceField の選択が POST と本文から削除されます。どこが間違っていますか?

編集 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 であろうとなかろうと、select は POST に値を与えなかったようです。jQueryを使用して、追加または削除されたオプション要素を強制的に選択する必要があります

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

私がそれをしたら、すべてがうまくいきます。

于 2013-05-16T16:35:30.480 に答える