Django自带的admin在展示数据是样式有点单一,我们可以自己定义数据的展示样式。

一、自定义数据展示样式

1、后台查询书记列表时,同时列出出版社和出版时间:

admin.py文件

from django.contrib import admin

import models

class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date') #展示 admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book,BookAdmin)

这样,展示效果如下图:

2、添加搜索框

admin.py

from django.contrib import admin

import models

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)

这样,就有搜索框了:

3、添加过滤器

admin.py

from django.contrib import admin

import models

class BookAdmin(admin.ModelAdmin):
list_display = ('name','publisher','publication_date')
search_fields = ('name','publisher__name')
list_filter = ('name','publisher','publication_date') #过滤 admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book,BookAdmin)

这样,在admin页面的右侧就添加了一个过滤器

4、编辑每行字段

admin.py

from django.contrib import admin

import models

class BookAdmin(admin.ModelAdmin):
list_display = ('id','name','publisher','publication_date')
search_fields = ('name','publisher__name')
list_filter = ('name','publisher','publication_date')
list_editable = ('name','publisher','publication_date') #可编辑的字段,注意,默认第一个字段不可编辑,因此添加'id'为第一个字段 admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book,BookAdmin)

效果如下:

5、设置每页显示的条数

admin.py

BookAdmin类中添加

list_per_page = 10

6、如果选项太多,可以先搜索,然后再添加

admin.py

filter_horizontal = ('authors',)

现实效果为:

二、Admin中Actions

给book新添加一个状态,表示出版和未出版,让其显示在admin里书籍的页面中。

1、在models中book类下添加status字段

class Book(models.Model):
name = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField() status_choices=(
('published','已出版'),
('publishing','未出版'),
('forbidden','禁止出版'),
) status = models.CharField(choices=status_choices,max_length=32,default='publishing') #default字段必须添加,否则同步数据库会出错,默认为未出版 def __unicode__(self):
return self.name
class Meta:
verbose_name_plural='书籍名称'

2、同步数据库

sudo python manage.py makemigrations

sudo python manage.py migrate

然后在amdin中book信息显示叶就多了status的选项:

3、显示数据信息时,将状态显示出来

admin.py

class BookAdmin(admin.ModelAdmin):
list_display = ('id','name','publisher','publication_date','status')

默认每本书的状态都是'未出版',如果现在要批量修改为'已出版'或者'禁止出版',就要使用action了。

在actions中添加已出版和禁止出版选项,然后不同的状态显示不同的背景颜色。

models.py


#!_*_ coding:utf-8 _*_
from __future__ import unicode_literals
from django.db import models
from django.utils.html import format_html #format_html是将html代码传给admin时依html格式显示,否则只显示本身字符串
class Book(models.Model):
name = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
publisher = models.ForeignKey(Publisher)
publication_date = models.DateField()
status_choices=(
('published',u'已出版'),
('publishing',u'未出版'),
('forbidden',u'禁止出版'),
)
status = models.CharField(choices=status_choices,max_length=32,default='publishing')
def __unicode__(self):
return self.name
class Meta:
# 显示中文
verbose_name_plural=u'书籍名称' def status_color(self):
if self.status=='published':
format_td=format_html('<span style="padding:2px;background-color:yellowgreen;color:white">已出版</span>')
if self.status=='publishing':
format_td=format_html('<span style="padding:2px;background-color:pink;color:white">未出版</span>')
if self.status=='forbidden':
format_td=format_html('<span style="padding:2px;background-color:orange;color:white">禁止出版</span>')
return format_td #将html样式传递给admin展示页面 status_color.short_description='status' #admin展示时名称为status(一个别名)

admin.py

def make_published(modelAdmin,request,queryset):      #queryset是选中的对象的集合
queryset.update(status='published')
make_published.short_description='出版' def make_forbidden(modelAdmin,request,queryset):
queryset.update(status='forbidden')
make_forbidden.short_description='禁止出版' class BookAdmin(admin.ModelAdmin):
list_display = ('id','name','publisher','publication_date','status_color') #添加model中新定义的函数status_color,在admin中显示出来
search_fields = ('name','publisher__name')
list_filter = ('name','publisher','publication_date')
list_editable = ('name','publisher','publication_date')
filter_horizontal = ('authors',)
actions = [make_published,make_forbidden] #action中显示的选项

效果如下:

这样就可以批量的修改了。

Django中Admin样式定制的更多相关文章

  1. Django 中 admin 的执行流程

    Django 中 admin 的执行流程 1 循环加载执行所有已经注册的 app 中的 admin.py 文件 def autodiscover(): autodiscover_modules('ad ...

  2. django中admin的使用

    转载网址:https://www.cnblogs.com/wumingxiaoyao/p/6928297.html     Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理 ...

  3. Django的admin样式丢失【静态文件收集】

    在部署完Django项目后,进行admin后台登录发现样式丢失,后台日志显示:js和css文件丢失 解决办法: 配置settings.py如下: #DEBUG打开时,app的静态文件默认从这里读取 S ...

  4. Django 中Admin站点的配置

    Admin站点是django提供的一个后台管理页面,可以用来对用户与数据库表数据进行管理. Admin站点配置流程 1.在settings.py文件中INSTALL_APPS列表中添加django.c ...

  5. django中admin一些方法

    1.概述:内容发布,负责添加,修改,删除内容及公告访问2.配置admin应用在settings文件中INSTALLED_APPS添加:'django.contrib.admin', 默认是已经添加好的 ...

  6. django中admin

    我们在models中建立了表结构,想要在admin中表示: from django.contrib import admin from . import models for table in mod ...

  7. django中admin路由系统工作原理

    一.如图所示 from django.contrib import admin from . import models class zhangsan(admin.ModelAdmin): list_ ...

  8. Django 中自定义 Admin 样式与功能

    目录 自定义 Admin 样式与功能 1 页面修改中文 1.1 语言设置为中文 1.2 应用管理设置为中文 1.3 数据库表设置为中文 1.4 数据库表字段名称修改为中文 2 修改后台样式 2.1 安 ...

  9. django中的django admin插件

    一.django admin前言 1.admin的作用 为了方便后台开发者快速的部署测试环境,于是就产生了admin,admin主要是操作models中的类从而实现对数据库中的数据增删改查的操作. 2 ...

随机推荐

  1. CSS菜单横竖布局要点

    菜单纵向:把ul 元素的边框属性去除,li元素用border-top  上边框显示分离,把a 元素用display:block  text-decoration:none  去除默认下划线 菜单横向: ...

  2. feature2d相关

    1.Harris角点检测 是基于灰度图像的角点检测. 灰度变化率函数如下: 其中的w(x,y)为加权函数,可为常数或为高斯函数.之后对E(u,v)进行泰勒级数的展开与化简,最终得到 ,,Ix,Iy是图 ...

  3. ngDialog 设置其宽度大小

    [ngdialog弹窗大小设置(angularjs)] 方法一:添加css样式属性 css: .ngdialog.ngdialog-theme-plain.custom-width-70 .ngdia ...

  4. Android抽屉效果 DrawerLayout 入门经验总结

    今天试了试这个抽屉布局的效果,结果很崩溃无语 网上很多资料都千篇一律,感觉都有问题,下面总结下几点经验: 先上个效果图: 1.  layout 布局文件中怎么写: <android.suppor ...

  5. Java的URL来下载网页源码

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; impor ...

  6. db2 常用配置

    db2set配置: db2set DB2_ENABLE_LDAP=NO db2set DB2_ALTERNATE_GROUP_LOOKUP=GETGROUPLIST db2set DB2_RESTOR ...

  7. 如何使用Maven的archetype快速生成一个新项目(解决生成项目目录不完整问题)

    Maven的archetype Plugin可能大家都听过,但不一定都能很好地用好它.缺省地如果你使用 mvn archetype:generate  会从maven的Repository里查找所有支 ...

  8. vga显示彩条

    vga显示驱动程序可分为扫描行列和行列同步两个部分 //注意:只有在有效区域内给vga赋值才会有颜色变化 assign vga_b = isready ? vga_s[:] :'d0; assign ...

  9. 拓展自定义编辑器窗口(EditorGUILayout类)

    Unity支持自行创建窗口,也支持自定义窗口布局.在Project视图中创建一个Editor文件夹,在文件夹中再创建一条脚本. 自定义窗口需要让脚本继承EditorWindow再设置MenuItem, ...

  10. PHP识别电脑还是手机访问网站

    最近在做phongap的项目,同一套代码,支持pc可以调试,又支持手机app调用接口,如果在pc上不屏掉调用接口js会报错,难以加载 ,所以就在网上找了,这个,不是原创,重在分享. <?php ...