django4 admin定制
Django Admin
概念:admin 是django 自带的用来进行数据库管理的web app.
admin 访问
http://localhost:yourport/admin/
admin要使用超级用户权限,登录先创建超级用户账号。
python manage.py createsuperuser
在每个app下有个admin.py文件 ,在那里面注册你想要被管理的表
from django.contrib import admin
# Register your models here.
from mysite import models
admin.site.register(models.Book)
就可以使用超级用户账号在admin上对数据库进行操作了
admin定制
定义每张表显示哪些字段、对某些字段进行过滤、允许搜索等功能
list_display定义表数据要展示哪些字段
search_fields定义可以通过哪些字段进行搜索
from django.contrib import admin
from mysite import models
# Register your models here.
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date')
search_fields = ('name','publisher__name')
admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book, BookAdmin)

list_editable定义哪些字段可以编辑
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date')
search_fields = ('name','publisher__name')
list_editable = ('publisher','publication_date')#list_display的第一个字段不可以编辑
admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book, BookAdmin)

fields[] 决定对表进行修改时展示哪些字段
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date')
search_fields = ('name','publisher__name')
list_editable = ('publisher','publication_date')
fields = ['name','publisher']
admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book, BookAdmin)

多个字段显示在一行的写法
fields = ['name',('publisher','publication_date')]
Action批量修改
给publisher添加一个lever,用来区别
1、在models中publisher 类下添加lever字段
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
p_lever = (
('top', u'顶级出版社'),
('one', u'一级出版社'),
('two', u'二级出版社'),
)
lever = models.CharField(choices=p_lever, max_length=32, default='one')
def __str__(self):
return self.name
class Meta:
verbose_name_plural = '出版社'
def lever_color(self):
format_td = ''
if self.lever == 'top':
format_td = format_html('<span >顶级出版社</span>')
if self.lever == 'one':
format_td = format_html('<span >一级出版社</span>')
if self.lever == 'two':
format_td = format_html('<span >二级出版社</span>')
return format_td
lever_color.short_description = 'lever'
2、同步数据库
python manage.py makemigrations
python manage.py migrate
在admin中book信息多了lever的选项:

3、显示数据信息时,将有css样式的状态显示出来
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date')
search_fields = ('name','publisher__name')
list_editable = ('publisher','publication_date')
fields = ['name',('publisher','publication_date')]
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','address','city','state_province','website','lever_color')

4、指定action处理函数
admin.py
from django.contrib import admin
from mysite import models
# Register your models here.
def make_top(modelAdmin,request,queryset): #queryset是选中的对象的集合
queryset.update(lever='top')
make_top.short_description='顶级出版社'
def make_one(modelAdmin,request,queryset):
queryset.update(lever='one')
make_one.short_description='一级出版社'
def make_two(modelAdmin,request,queryset):
queryset.update(lever='two')
make_two.short_description='二级出版社'
class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date')
search_fields = ('name','publisher__name')
list_editable = ('publisher','publication_date')
fields = ['name',('publisher','publication_date')]
class PublisherAdmin(admin.ModelAdmin):
list_display = ('name','address','city','state_province','website','lever_color')
actions = [make_top, make_one, make_two]


浙公网安备 33010602011771号