我们的网站 model 如下:
from django.db import models
STATUS_CHOICES = (
('d', 'Draft'),
('p', 'Published'),
('w', 'Withdrawn'),
)
class Article(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
status = models.CharField(max_length=1, choices=STATUS_CHOICES)
def __str__(self):
return self.title
假设我们的网站文章很多,手动一个个去改变 status 的状态非常麻烦而耗时。
我们自定义一个方法,能够批量把文章的 status 批量改为 Published,并让这个方法能在后台管理界面轻松使用。
from django.contrib import admin
from myApp.models import Article
# 自定义的操作方法,接受3个参数
# modeladmin 当前的 ModelAdmin
# request 表示当前请求的 HttpRequest
# queryset 表示用户所选的对象集合的 QuerySet
def make_published(modeladmin, request, queryset):
queryset.update(status='p')
# 操作的简称
make_published.short_description = "改变状态为:published"
# 定义 ModelAdmin 类
# ModelAdmin 类封装了模型自定义的 Admin 功能和选项
class ArticleAdmin(admin.ModelAdmin):
# 要展示的字段
list_display = ['title', 'status']
# 排序依据
ordering = ['title']
# 新加入的操作方法
actions = [make_published]
# 参数带上 ModelAdmin 才能添加自定义的属性和方法
admin.site.register(Article, ArticleAdmin)
现在我们自定义的后台管理界面变成这样了:

批量修改文章状态:

改变 action 选择框的位置
使用 actions_on_top 和 actions_on_bottom 参数即可选择把 action 选择框放到顶部或底部:
class ArticleAdmin(admin.ModelAdmin):
……
……
actions_on_top = False
actions_on_bottom = True

actions_selection_counter
待补充