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. wife信号如何传播

    方法一:像哈利波特一样穿墙而出 无论是wife信号还是广播信号本质上都属于电磁波.x光穿透力强所以可以穿透人体给体内照相,但是wife信号作为电磁波虽然也可以穿透墙而过,但是他的穿透能力实在是太弱了. ...

  2. C语言调用lua

    在lua API中,调用一个函数的步骤很简单: 1.压入你要调用的函数,使用lua_getglobal. 2.压入调用参数. 3.使用lua_pcall 4.从栈中弹出结果.   举例说明,假设你有这 ...

  3. Python 自动给数字前面补0

    为了排版方便或者是输出文件命名整洁,通常需要给数字前面补0来做统一.Python中有一个zfill函数用来给字符串前面补0,非常有用,这个zfill看起来也就是zero fill的缩写吧,看一下如何使 ...

  4. Fedora24 升级到25

    1 安装dnf-plugin-system-upgrade dnf install dnf-plugin-system-upgrade 2 更新软件包 dnf system-upgrade downl ...

  5. Genymotion下载失败解决方法

    Genymotion下载虚拟机版本时会很慢,而且经常下载失败 解决方法如下: 1.先去选择下载你需要的版本,之后会下载(很慢),或者失败. 2.到C:\Users\yourname\AppData\L ...

  6. HDU 5903 Square Distance

    $dp$预处理,贪心. 因为$t$串前半部分和后半部分是一样的,所以只要构造前一半就可以了. 因为要求字典序最小,所以肯定是从第一位开始贪心选择,$a,b,c,d,...z$,一个一个尝试过去,如果发 ...

  7. bzDemo

    <Public> <property name="Types"> <get/> </property> <method nam ...

  8. SQLite语句

    搜索某属性: select exp from player where level = 2; 创建表: create table player (level integer primary key, ...

  9. PWM

    #include "sys.h" #include "beep.h" //tim5 定时器 /* tim4 定时器 定时10分钟 控制LED1 */ void ...

  10. Linux 下搭建jsp服务器(配置jsp开发环境)

    Linux 做为服务器的高效一直时为人所熟知的了,在linux 上搭建各种各样的服务器和开发环境也时学计算机的人常做的.以下时最近在linux配置jsp服务器的全过程,包含一些基本步骤和排错过程: 1 ...