通过Ajax向Django发送一个复选框列表

时间:2016-10-21 05:47:03

标签: javascript ajax django

我的Django应用程序中的表格中有一个复选框列表。用户选择其中一些然后单击操作按钮。然后会弹出一个小弹出模式窗体,在这里填写与所选项目相关的信息,他们还可以在弹出窗口中上传文件。我需要发送选中的复选框' id和Django模式中的表单字段通过ajax

我已将模态包装在表单标签中并且一切正常。我正在努力将所选ID列表发送给Django。当用户选择id 31和32时,它将其发送为' 31,32'作为一个字符串,Django无法对其进行解码。我确定这是一个快速修复,但我的javascript知识有限。

以下是我的代码:

HTML:

spark

使用Javascript:

<tr>
    <td ><input class="selection-box" type="checkbox" name="action" value="{{ item.id }}"></td>
    <td>...</td>
</tr>
<tr>
    <td ><input class="selection-box" type="checkbox" name="action" value="{{ item.id }}"></td>
    <td>...</td>
</tr>

Django观点:

submitHandler: function () {
    var matches = [];
    $(".selection-box:checked").each(function() {
        matches.push(this.value);
    });
    var form = document.forms.namedItem("fileinfo");// This is the popup form that contains that file upload box and other fields
    var oData = new FormData(form);
    if (matches.length) {
        oData.append('action', matches);
    }
    $.ajax({
        url: url,
        processData: false,
        contentType: false,
        type: 'post',
        data: oData,
        success: function (data) {
            if (data.success == true) {
                location.reload();
            }
        }
    });
}

1 个答案:

答案 0 :(得分:1)

由于您手动执行“解码”,而不是使用.getlist,因此您可以使用.get.split

selected_list = self.request.POST.get('action', '').split(',')

但请注意,返回的list会将ids作为字符串包含在内,因此您可以使用map将其转换为整数。

try:
    cleaned_list = map(int, selected_list)
except ValueError:
    #list is empty: ['']
    cleaned_list = []