如何通过ajax Django发布复选框数据?

Posted

技术标签:

【中文标题】如何通过ajax Django发布复选框数据?【英文标题】:How to post data of checkbox by ajax Django? 【发布时间】:2021-10-18 01:44:43 【问题描述】:

如何使用 ajax 将 is_read 复选框字段提交到数据库中? 当我尝试勾选复选框字段时,我收到此错误core.models.Article.DoesNotExist: Article matching query does not exist.

models.py

class Article(models.Model):
    title = models.CharField(max_length=300)
    is_read = models.BooleanField(default=False)

views.py

@csrf_exempt
def Story_status_update(request):
    if request.method == 'POST':
        pk = request.POST.get('pk')
        item = Article.objects.get(id=pk)
        print(item)
        item.is_read = True
        item.save()
        return JsonResponse('succes': True, status=200)
    else:
        return JsonResponse('succes': False, 'errors': [], status=400)

HTML

<tbody>
    % for object in articles %
    <tr data-pk=" object.id ">
        <td> object.title </td>
        <td><input type="checkbox" data-id=" object.id " name="is_read" id="id_is_read" /></td>
    </tr>
    % endfor %
</tbody>

ajax.js

    $("#id_is_read").click(function () 
        var pk = $('tr').attr("data-pk");
        $.ajax(
            type: "Post",
            contentType: "application/json;",
            url: "% url 'status-update' %",
            data:  pk: pk ,
            dataType: "json",
            success: function (response) 
                console.log(response)
            ,
        );
    );

【问题讨论】:

【参考方案1】:

我不确定 Django 部分,但是

对于 html,您正在创建多个具有相同 id 的复选框,这是无效的,请改用一个类。

<tbody>
    % for object in articles %
    <tr data-pk=" object.id ">
        <td> object.title </td>
        <td><input type="checkbox" data-id=" object.id " name="is_read" class="class_is_read" /></td>
    </tr>
    % endfor %
</tbody>

对于 javascript,使用类作为选择器并选择正确的行。 此外,内容类型错误,因为您没有发送 JSON,因此请删除 contentType

$(".class_is_read").click(function () 
    var pk = $(this).closest('tr').attr("data-pk"); // select the correct row
    $.ajax(
        type: "POST",
        url: "% url 'status-update' %",
        data:  pk: pk ,
        dataType: "json",
        success: function (response) 
            console.log(response)
        ,
    );
);

【讨论】:

以上是关于如何通过ajax Django发布复选框数据?的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何通过 AJAX 将 PKID 列表传递给下一个视图,然后重定向

单击表单复选框并传递复选框布尔值时如何在Django中刷新view.py?

如何使用 Ajax 将复选框信息添加到 MySQL 数据库?

如何使用 jQuery 通过 Ajax 发送复选框数组的值?

如何通过 django 读取 excel 文件中的复选框值?

如何通过关系将复选框值保存到 django 中的 ManyToManyField?