自定义管理操作(actions )

我们的网站 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)

现在我们自定义的后台管理界面变成这样了:

自定义管理操作(actions )_第1张图片

批量修改文章状态:

自定义管理操作(actions )_第2张图片




改变 action 选择框的位置

使用 actions_on_topactions_on_bottom 参数即可选择把 action 选择框放到顶部或底部:

class ArticleAdmin(admin.ModelAdmin):
    ……
    ……
    actions_on_top = False
    actions_on_bottom = True
自定义管理操作(actions )_第3张图片




actions_selection_counter

待补充

你可能感兴趣的:(自定义管理操作(actions ))