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]

posted @ 2020-08-14 19:09  inhocho  阅读(98)  评论(0)    收藏  举报