Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/django-admin-modeladmin.html

Django Admin 模型编辑界面类 ModelAdmin 详解


ModelAdmin 是 Django 框架中用于管理和配置 Django 模型在后台管理界面中显示和编辑的类。它允许开发者对模型的展示、过滤、搜索、排序等进行定制,以及定义模型实例的编辑界面。通过继承 ModelAdmin 类并在其基础上配置属性,你可以非常灵活地控制模型在管理员界面中的行为。

注册方式

在 Django 中,你可以通过多种方式来注册自定义的 ModelAdmin 类。

以下是几种常见的方式:

通过 admin.site.register() 函数注册

这是最常用的方式,适用于大多数情况。

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    # 自定义 ModelAdmin 的属性和方法

admin.site.register(YourModel, YourModelAdmin)

装饰器方式注册

从 Django 1.9 开始,你可以使用装饰器 @admin.register() 来注册 ModelAdmin

from django.contrib import admin
from .models import YourModel

@admin.register(YourModel)
class YourModelAdmin(admin.ModelAdmin):
    # 自定义 ModelAdmin 的属性和方法

在模型类中定义内部 Meta 类

你可以在模型类中定义一个内部的 Meta 类,并在其中指定 model_admin 属性来关联自定义的 ModelAdmin

from django.db import models
from django.contrib import admin

class YourModel(models.Model):
    # 模型的字段定义

    class Meta:
        pass

class YourModelAdmin(admin.ModelAdmin):
    # 自定义 ModelAdmin 的属性和方法

YourModel.Meta.model_admin = YourModelAdmin
admin.site.register(YourModel)

使用 AdminSite 子类

如果你希望在不同的地方使用不同的 ModelAdmin 配置,你可以通过创建 AdminSite 的子类来实现。

from django.contrib import admin

class CustomAdminSite(admin.AdminSite):
    pass

custom_admin_site = CustomAdminSite(name='custom_admin')

然后在你的自定义 ModelAdmin 中使用该子类:

from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    # 自定义 ModelAdmin 的属性和方法

custom_admin_site.register(YourModel, YourModelAdmin)

基础内置属性

ModelAdmin 类有许多内置属性,用于配置在 Django 后台管理界面中显示和编辑模型的行为。

以下是一些常用的内置属性以及它们的作用:

list_display

list_display 用于指定在模型列表页面中显示的字段列表。这些字段将以表格列的形式显示出来,让你可以快速浏览模型实例的数据。

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'created_at')

admin.site.register(YourModel, YourModelAdmin)

list_display_links  指定在模型列表页面上点击哪个字段的链接会进入编辑页面。

class YourModelAdmin(admin.ModelAdmin):
    list_display_links = ('name',)

admin.site.register(YourModel, YourModelAdmin)

list_filter

list_filter  允许你在模型列表页面的侧边栏添加过滤器,以便根据某些字段的值来筛选模型实例。

class YourModelAdmin(admin.ModelAdmin):
    list_filter = ('category', 'status')

admin.site.register(YourModel, YourModelAdmin)

list_per_page

list_per_page  用于指定在模型列表页面中每页显示的模型实例数量。默认情况下,Django 后台管理界面会根据配置显示一定数量的模型实例,而使用 list_per_page 可以自定义每页显示的数量。

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'created_at')
    
    # 每页显示 20 条模型实例
    list_per_page = 20

admin.site.register(YourModel, YourModelAdmin)

list_max_show_all

list_max_show_all  设置一个数值,当列表元素总数小于这个值的时候,将显示一个“show all”链接,点击后就能看到一个展示了所有元素的页面。该值默认为 200。

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'created_at')
    
    # 设置 "Show all" 选项的阈值为 100
    list_max_show_all = 100

admin.site.register(YourModel, YourModelAdmin)

list_editable

list_editable  用于在模型列表页面中允许直接编辑某些字段的值,而不必进入编辑页面。这可以提高用户在后台管理界面中对数据的编辑效率。

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'status', 'created_at')
    
    # 允许在列表页面中直接编辑 'status' 字段
    list_editable = ('status',)

admin.site.register(YourModel, YourModelAdmin)

search_fields

search_fields  允许你在模型列表页面添加一个搜索框,用于根据指定的字段进行模糊搜索。

class YourModelAdmin(admin.ModelAdmin):
    search_fields = ('name', 'description')

admin.site.register(YourModel, YourModelAdmin)

search_help_text

设置 search_help_text,为搜索框指定一个描述性文本,显示在它的下面。Django 4.0 开始新增内置属性。 

class YourModelAdmin(admin.ModelAdmin):
    search_help_text = '这是搜索框提示'

admin.site.register(YourModel, YourModelAdmin)

date_hierarchy

date_hierarchy  它用于在模型列表页面中添加一个日期层次结构导航,允许你按照日期来快速筛选模型实例。这在管理包含日期字段的模型时非常有用,例如日志、活动等。

from django.contrib import admin
from .models import LogEntry

class LogEntryAdmin(admin.ModelAdmin):
    list_display = ('id', 'action', 'timestamp')
    
    # 添加日期层次结构导航,按照 'timestamp' 字段筛选
    date_hierarchy = 'timestamp'

admin.site.register(LogEntry, LogEntryAdmin)

save_as

save_as  用于在模型编辑页面中显示一个 "Save as new"(另存为新实例)按钮,允许你将当前编辑的实例复制并创建一个新的实例。这在需要创建与现有实例类似的新实例时非常有用。

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'created_at')
    
    # 在编辑页面显示 "Save as new" 按钮
    save_as = True

admin.site.register(YourModel, YourModelAdmin)

save_as_continue

Django 4.0 开始新增的内置属性,当 save_as=True 时,保存新对象后默认重定向到该对象的变更视图。如果设置 save_as_continue=False,则重定向到变更列表视图。默认情况下,save_as_continue 被设置为 True

save_on_top

Django 4.0 新增的内置属性,设置  save_on_top  来在你的管理更改表格的顶部添加保存按钮。通常情况下,保存按钮只出现在表格的底部。如果设置  save_on_top,按钮将同时出现在顶部和底部。默认情况下,save_on_top  被设置为  False。Django 4.0 开始新增的内置属性。

paginator

Django 4.0 新增的内置属性,用于分页的分页器类。默认情况下,使用  django.core.paginator.Paginator。如果自定义的分页器类没有和  django.core.paginator.Paginator  一样的构造函数接口,你还需要为  ModelAdmin.get_paginator()  提供一个实现。

preserve_filters

Django 4.0 新增的内置属性,默认情况下,在创建、编辑或删除对象后,应用的过滤器会被保存在列表视图中。您可以通过将此属性设置为  False  来清除过滤器。

inlines

inlines 它允许你在模型编辑页面中嵌套关联的模型,以便在同一编辑页面上同时编辑主模型和关联数据。这在涉及到多对多或一对多关系的模型时非常有用。

from django.contrib import admin
from .models import Author, Book

class BookInline(admin.TabularInline):  # 或 admin.StackedInline
    model = Book
    extra = 1

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')
    
    # 在作者编辑页面嵌套显示关联的书籍
    inlines = [BookInline]

admin.site.register(Author, AuthorAdmin)

在上述示例中,我们创建了一个名为 BookInline 的内联类,通过继承自 admin.TabularInline (或 admin.StackedInline )来指定关联模型是 Book。然后,在 AuthorAdmin 中使用 inlines 属性将 BookInline 添加到 inlines 列表中,这将在作者编辑页面上嵌套显示关联的书籍。

这样,当你编辑作者时,你可以在同一页面上查看和编辑与该作者关联的书籍。inlines 属性非常有用,可以在单个编辑页面上管理主模型与其关联数据之间的关系。

自定义模板选项

覆盖管理模板部分描述了如何覆盖或扩展默认的管理模板。使用以下选项来覆盖 ModelAdmin 视图使用的默认模板。

add_form_template

自定义模板的路径,通过指定这个属性,您可以使用自定义的 HTML 模板来定制模型的添加表单页面的外观和布局。

首先,创建一个自定义的添加表单模板,例如 custom_add_form.html

{% extends "admin/base.html" %}

{% block content %}
  <div class="add-model-form">
    <h2>Add New Model</h2>
    <form method="post" enctype="multipart/form-data" action="{% url 'admin:yourapp_yourmodel_add' %}">
      {% csrf_token %}
      {{ form.as_p }}
      <button type="submit">Save</button>
    </form>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 add_form_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    add_form_template = 'admin/custom_add_form.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当您点击后台管理界面中的“添加”按钮时,将使用您的自定义模板来渲染添加表单页面。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

change_form_template

自定义模板的路径,通过指定这个属性,您可以使用自定义的 HTML 模板来定制模型的修改表单页面的外观和布局。

以下是使用 change_form_template 属性的示例代码:

首先,创建一个自定义的修改表单模板,例如 custom_change_form.html

{% extends "admin/change_form.html" %}

{% block content %}
  <div class="change-model-form">
    <h2>Edit Model</h2>
    <form method="post" enctype="multipart/form-data" action="{% url 'admin:yourapp_yourmodel_change' object_id %}">
      {% csrf_token %}
      {{ form.as_p }}
      <button type="submit">Save</button>
    </form>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 change_form_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    change_form_template = 'admin/custom_change_form.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当您点击后台管理界面中的某个记录并进入其修改页面时,将使用您的自定义模板来渲染修改表单页面。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

change_list_template

自定义模板的路径,用于自定义 Django 管理界面中的模型列表页面(包括搜索、过滤和排序功能)的模板属性。通过指定这个属性,您可以使用自定义的 HTML 模板来定制模型列表页面的外观和布局。

以下是使用 change_list_template 属性的示例代码:

首先,创建一个自定义的模型列表模板,例如 custom_change_list.html

{% extends "admin/change_list.html" %}

{% block content %}
  <div class="custom-change-list">
    <h2>Custom Model List</h2>
    <table>
      <thead>
        <tr>
          <th>ID</th>
          <th>Name</th>
          <th>Created At</th>
        </tr>
      </thead>
      <tbody>
        {% for obj in result_list %}
          <tr>
            <td>{{ obj.id }}</td>
            <td>{{ obj.name }}</td>
            <td>{{ obj.created_at }}</td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 change_list_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    change_list_template = 'admin/custom_change_list.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当您访问模型的后台管理列表页面时,将使用您的自定义模板来渲染模型列表。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

delete_confirmation_template

delete_confirmation_template 是用于自定义 Django 管理界面中删除确认页面的模板属性。通过指定这个属性,您可以使用自定义的 HTML 模板来定制删除确认页面的外观和布局。

以下是使用 delete_confirmation_template 属性的示例代码:

首先,创建一个自定义的删除确认模板,例如 custom_delete_confirmation.html

{% extends "admin/delete_confirmation.html" %}

{% block content %}
  <div class="custom-delete-confirmation">
    <h2>Delete Confirmation</h2>
    <p>Are you sure you want to delete "{{ object }}"?</p>
    <form method="post">
      {% csrf_token %}
      <button type="submit" class="delete-button">Delete</button>
      <a href="{% url opts|admin_urlname:'changelist' %}" class="cancel-link">Cancel</a>
    </form>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 delete_confirmation_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    delete_confirmation_template = 'admin/custom_delete_confirmation.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当您在后台管理界面中点击删除按钮并触发删除确认页面时,将使用您的自定义模板来渲染删除确认页面。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

delete_selected_confirmation_template

在 Django 的管理界面中,delete_selected_confirmation_template 属性用于自定义批量删除操作的确认页面模板。通过指定这个属性,您可以使用自定义的 HTML 模板来定制批量删除操作的确认页面的外观和布局。

以下是使用 delete_selected_confirmation_template 属性的示例代码:

首先,创建一个自定义的批量删除确认模板,例如 custom_delete_selected_confirmation.html

{% extends "admin/delete_selected_confirmation.html" %}

{% block content %}
  <div class="custom-delete-selected-confirmation">
    <h2>Delete Selected Confirmation</h2>
    <p>Are you sure you want to delete the selected items?</p>
    <form method="post">
      {% csrf_token %}
      <button type="submit" class="delete-button">Delete</button>
      <a href="{% url opts|admin_urlname:'changelist' %}" class="cancel-link">Cancel</a>
    </form>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 delete_selected_confirmation_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    delete_selected_confirmation_template = 'admin/custom_delete_selected_confirmation.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当您在后台管理界面中进行批量删除操作并触发确认页面时,将使用您的自定义模板来渲染批量删除确认页面。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

object_history_template

object_history_template 是用于自定义 Django 管理界面中模型对象历史记录页面的模板属性。通过指定这个属性,您可以使用自定义的 HTML 模板来定制模型对象历史记录页面的外观和布局。

历史记录页面显示了关于特定对象的版本历史,包括每个版本的字段值和变更信息。

以下是使用 object_history_template 属性的示例代码:

首先,创建一个自定义的模型对象历史记录模板,例如 custom_object_history.html

{% extends "admin/object_history.html" %}

{% block content %}
  <div class="custom-object-history">
    <h2>Object History for {{ object }}</h2>
    <table>
      <thead>
        <tr>
          <th>Version</th>
          <th>Timestamp</th>
          <th>User</th>
          <th>Change Message</th>
          <th>Changes</th>
        </tr>
      </thead>
      <tbody>
        {% for version in versions %}
          <tr>
            <td>{{ version.version }}</td>
            <td>{{ version.timestamp }}</td>
            <td>{{ version.user }}</td>
            <td>{{ version.comment }}</td>
            <td>
              <ul>
                {% for change in version.changes %}
                  <li>{{ change.field }}: {{ change.old_value }} ➔ {{ change.new_value }}</li>
                {% endfor %}
              </ul>
            </td>
          </tr>
        {% endfor %}
      </tbody>
    </table>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 object_history_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    object_history_template = 'admin/custom_object_history.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当您在后台管理界面中查看某个模型对象的历史记录时,将使用您的自定义模板来渲染对象历史记录页面。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

popup_response_template 属性是用于自定义 Django 管理界面中的弹出窗口响应的模板属性。通过指定这个属性,您可以使用自定义的 HTML 模板来定制弹出窗口中的响应内容的外观和布局。

这在 Django 中常用于在弹出窗口中显示一些反馈信息或操作结果。

以下是使用 popup_response_template 属性的示例代码:

首先,创建一个自定义的弹出窗口响应模板,例如 custom_popup_response.html

{% extends "admin/popup_response.html" %}

{% block content %}
  <div class="custom-popup-response">
    <h2>Custom Popup Response</h2>
    <p>{{ message }}</p>
    <a href="#" class="close-link" onclick="window.close();">Close</a>
  </div>
{% endblock %}

然后,在您的 ModelAdmin 子类中,使用 popup_response_template 属性指定该模板:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    popup_response_template = 'admin/custom_popup_response.html'

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,当在后台管理界面中执行某个操作并需要弹出窗口来显示反馈信息时,将使用您的自定义模板来渲染弹出窗口的响应内容。您可以根据需要在模板中添加任何自定义的 HTML、样式和脚本,以满足您的设计和布局要求。

操作属性

actions

在 Django 的管理界面中,actions 属性允许您定义自定义的批量操作。这些操作可以应用于选中的多个对象,从而批量执行某些操作,如删除、标记为已处理等。

actions 属性是一个字典,其中键是操作的名称,值是一个函数。该函数应该接受两个参数: modeladmin (ModelAdmin 的实例)和 queryset (被选中的对象集合)。操作函数可以使用 queryset 来执行特定的批量操作。

以下是一个使用 actions 属性的示例代码:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_processed')
    actions = ['mark_as_processed', 'delete_selected']

    def mark_as_processed(self, request, queryset):
        queryset.update(is_processed=True)
        self.message_user(request, "Selected items marked as processed.")

    mark_as_processed.short_description = "Mark selected items as processed"

admin.site.register(YourModel, YourModelAdmin)

在上面的示例中,我们定义了一个自定义的操作函数 mark_as_processed,用于将选中的对象标记为已处理。然后,我们将这个操作添加到 actions 列表中,并为它定义了一个简短的描述。当您在后台管理界面中选中一些对象并选择这个操作时,它会将这些对象的状态更新为已处理,并在页面上显示一个成功消息。

您可以根据需要定义多个自定义操作,然后在列表页面上的批量操作下拉菜单中选择这些操作。通过定义适当的操作函数,您可以实现各种批量操作,以满足您的项目需求。

action_form

在 Django 的管理界面中,action_form 属性用于自定义批量操作的表单。通过指定这个属性,您可以使用自定义的表单来控制和定制批量操作的参数。

action_form 属性应该是一个 Django 表单类,它可以包含您需要的字段,以便在执行批量操作时收集用户输入的数据。

以下是使用 action_form 属性的示例代码:

from django import forms
from django.contrib import admin
from .models import YourModel

class CustomActionForm(forms.Form):
    custom_field = forms.CharField(label="Custom Field", max_length=100)

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_processed')
    actions = ['custom_action']
    action_form = CustomActionForm

    def custom_action(self, request, queryset):
        form = self.action_form(request.POST)
        if form.is_valid():
            custom_value = form.cleaned_data['custom_field']
            # Perform custom action using custom_value and queryset
            self.message_user(request, f"Custom action executed with value: {custom_value}")
        else:
            self.message_user(request, "Custom action form is not valid.")

    custom_action.short_description = "Custom Batch Action"

admin.site.register(YourModel, YourModelAdmin)

在这个示例中,我们首先定义了一个自定义的表单类 CustomActionForm,它包含一个自定义字段 custom_field。然后,在 YourModelAdmin 类中,我们指定了 action_form 属性为这个自定义表单类。

我们还定义了一个名为 custom_action 的自定义操作函数,用于执行批量操作。在操作函数中,我们通过获取表单数据来执行自定义的批量操作,然后根据操作的结果显示适当的消息。

当您在后台管理界面中选择一个批量操作并提交表单时,将使用您的自定义表单来收集用户输入的数据,并在操作函数中处理这些数据。

请注意,上述示例中的自定义操作是一个简单的示例,您可以根据需要扩展和修改它来实现您的项目要求。

actions_on_top

在 Django 的管理界面中,actions_on_top 属性用于控制批量操作是否显示在列表页面的顶部。通过设置这个属性,您可以决定批量操作按钮是在列表页面的顶部还是底部,或者两者都显示。

actions_on_top 可以是一个布尔值(TrueFalse ),用于指示是否在顶部显示批量操作按钮。

以下是使用 actions_on_top 属性的示例代码:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_processed')
    actions_on_top = False  # 将批量操作按钮放在底部
    actions_on_bottom = True  # 在列表底部也显示批量操作按钮
    actions = ['mark_as_processed', 'delete_selected']

    def mark_as_processed(self, request, queryset):
        queryset.update(is_processed=True)
        self.message_user(request, "Selected items marked as processed.")

    mark_as_processed.short_description = "Mark selected items as processed"

admin.site.register(YourModel, YourModelAdmin)

在上面的示例中,我们设置了 actions_on_topFalse,这将使批量操作按钮显示在列表页面的底部。通过将 actions_on_bottom 设置为 True,我们还在底部显示了批量操作按钮。这样,您可以选择在列表页面的顶部、底部或两者都显示批量操作按钮。

根据您的设计和用户体验要求,您可以根据需要选择是否在页面的顶部、底部或两者都显示批量操作按钮。

actions_on_bottom

在 Django 的管理界面中,actions_on_bottom 属性用于控制批量操作是否显示在列表页面的底部。通过设置这个属性,您可以决定是否在底部显示批量操作按钮。

actions_on_bottom 可以是一个布尔值(TrueFalse ),用于指示是否在底部显示批量操作按钮。

以下是使用 actions_on_bottom 属性的示例代码:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_processed')
    actions_on_top = True  # 在顶部显示批量操作按钮
    actions_on_bottom = False  # 不在底部显示批量操作按钮
    actions = ['mark_as_processed', 'delete_selected']

    def mark_as_processed(self, request, queryset):
        queryset.update(is_processed=True)
        self.message_user(request, "Selected items marked as processed.")

    mark_as_processed.short_description = "Mark selected items as processed"

admin.site.register(YourModel, YourModelAdmin)

在上面的示例中,我们设置了 actions_on_bottomFalse,这意味着不会在列表页面的底部显示批量操作按钮。通过将 actions_on_top 设置为 True,我们在页面的顶部显示了批量操作按钮。这样,您可以选择在页面的顶部或底部显示批量操作按钮。

根据您的设计和用户体验要求,您可以根据需要选择是否在页面的顶部或底部显示批量操作按钮。

actions_selection_counter

actions_selection_counter 属性用于在 Django 管理界面中批量操作选择器旁边显示选中对象的计数器。该属性可以是一个布尔值(TrueFalse ),用于决定是否显示选中的对象计数。

当设置为 True 时,在执行批量操作时,会在操作选择器旁边显示选中对象的数量。

以下是使用 actions_selection_counter 属性的示例代码:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_processed')
    actions_selection_counter = True  # 在批量操作选择器旁边显示选中对象计数
    actions = ['mark_as_processed', 'delete_selected']

    def mark_as_processed(self, request, queryset):
        queryset.update(is_processed=True)
        self.message_user(request, "Selected items marked as processed.")

    mark_as_processed.short_description = "Mark selected items as processed"

admin.site.register(YourModel, YourModelAdmin)

在上面的示例中,我们设置了 actions_selection_counterTrue,这将在批量操作选择器旁边显示选中对象的计数。当您在后台管理界面中选择一些对象并执行批量操作时,将在操作选择器旁边显示选中的对象数量。

根据您的设计和用户体验要求,您可以选择是否显示选中对象的计数器。

checks_class

checks_class 属性用于自定义 Django 管理界面中批量操作选择器的样式类。通过设置这个属性,您可以为批量操作选择器添加自定义的样式类,以定制其外观。

checks_class 可以是一个字符串,用于指定要应用于批量操作选择器的样式类。

以下是使用 checks_class 属性的示例代码:

from django.contrib import admin
from .models import YourModel

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'is_processed')
    checks_class = 'custom-checks-class'  # 自定义批量操作选择器的样式类
    actions = ['mark_as_processed', 'delete_selected']

    def mark_as_processed(self, request, queryset):
        queryset.update(is_processed=True)
        self.message_user(request, "Selected items marked as processed.")

    mark_as_processed.short_description = "Mark selected items as processed"

admin.site.register(YourModel, YourModelAdmin)

在上面的示例中,我们设置了 checks_class'custom-checks-class',这将为批量操作选择器添加自定义的样式类。您可以在 CSS 样式表中定义这个类,以定制批量操作选择器的外观。

根据您的设计和样式需求,您可以使用 checks_class 属性添加不同的样式类来美化批量操作选择器。