我們的網(wǎng)站 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
假設(shè)我們的網(wǎng)站文章很多,手動一個個去改變 status 的狀態(tài)非常麻煩而耗時。
我們自定義一個方法,能夠批量把文章的 status 批量改為 Published,并讓這個方法能在后臺管理界面輕松使用。
from django.contrib import admin
from myApp.models import Article
# 自定義的操作方法,接受3個參數(shù)
# modeladmin 當前的 ModelAdmin
# request 表示當前請求的 HttpRequest
# queryset 表示用戶所選的對象集合的 QuerySet
def make_published(modeladmin, request, queryset):
queryset.update(status='p')
# 操作的簡稱
make_published.short_description = "改變狀態(tài)為:published"
# 定義 ModelAdmin 類
# ModelAdmin 類封裝了模型自定義的 Admin 功能和選項
class ArticleAdmin(admin.ModelAdmin):
# 要展示的字段
list_display = ['title', 'status']
# 排序依據(jù)
ordering = ['title']
# 新加入的操作方法
actions = [make_published]
# 參數(shù)帶上 ModelAdmin 才能添加自定義的屬性和方法
admin.site.register(Article, ArticleAdmin)
現(xiàn)在我們自定義的后臺管理界面變成這樣了:
批量修改文章狀態(tài):
改變 action 選擇框的位置
使用 actions_on_top 和 actions_on_bottom 參數(shù)即可選擇把 action 選擇框放到頂部或底部:
class ArticleAdmin(admin.ModelAdmin):
……
……
actions_on_top = False
actions_on_bottom = True
actions_selection_counter
待補充