You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin的change_list面板中将布尔字段设为可编辑复选框

在Django Admin的change_list面板实现布尔字段直接编辑(复选框形式)

你要的效果其实可以通过Django Admin内置的list_editable属性直接实现,不用依赖自定义动作,步骤如下:

  1. 在对应的ModelAdmin类中,确保目标字段deactivated出现在list_display里(这是list_editable生效的前提)
  2. 将deactivated添加到list_editable列表中

示例代码:

from django.contrib import admin
from .models import 你的模型类

@admin.register(你的模型类)
class 你的模型Admin(admin.ModelAdmin):
    # 列出你要在change_list展示的字段,必须包含deactivated
    list_display = ('id', '其他字段', 'deactivated')
    # 指定可直接在列表编辑的字段
    list_editable = ('deactivated',)

设置完成后,刷新change_list页面,deactivated字段会直接显示为可点击的复选框。你可以单独修改某一行的状态,也可以勾选多行后点击页面底部的「保存」按钮批量提交修改,比自定义动作更直观高效。

如果需要实现点击复选框即时保存(无需点击保存按钮),可以给Admin页面添加自定义JavaScript:

  • 在你的app下创建admin/你的模型类/change_list.html模板
  • 继承默认的admin change_list模板,添加以下脚本:
{% extends "admin/change_list.html" %}

{% block extrajs %}
{{ block.super }}
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 监听所有deactivated字段的复选框
    document.querySelectorAll('input[name="deactivated"]').forEach(checkbox => {
        checkbox.addEventListener('change', function() {
            const pk = this.closest('tr').querySelector('input[name="_selected_action"]').value;
            fetch(`../${pk}/change/`, {
                method: 'POST',
                headers: {
                    'X-CSRFToken': document.querySelector('[name=csrfmiddlewaretoken]').value,
                    'Content-Type': 'application/x-www-form-urlencoded'
                },
                body: `deactivated=${this.checked}&_save=保存`
            });
        });
    });
});
</script>
{% endblock %}

这个脚本会在复选框状态改变时,自动发送请求保存当前行的deactivated状态,无需手动点击保存按钮。

内容的提问来源于stack exchange,提问作者ELHADEF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:05:26