Django之 admin组件
本节内容
- 路由系统
- models模型
- admin
- views视图
- template模板
Django Admin介绍
admin 是django 自带的用来让你进行数据库管理的web app.
提供了很多定制化功能,你甚至可以用它来进行公司内部的内容管理
启用admin
你用startproject命令创建项目时django admin就默认启用了
For reference, here are the requirements:
- Add 'django.contrib.admin' to your INSTALLED_APPS setting.
- The admin has four dependencies - django.contrib.auth, django.contrib.contenttypes, django.contrib.messages and django.contrib.sessions. If these applications are not in your INSTALLED_APPS list, add them.
- Add django.contrib.auth.context_processors.auth and django.contrib.messages.context_processors.messages to the 'context_processors' option of the DjangoTemplates backend defined in your TEMPLATES as well as django.contrib.auth.middleware.AuthenticationMiddleware and django.contrib.messages.middleware.MessageMiddleware to MIDDLEWARE. These are all active by default, so you only need to do this if you’ve manually tweaked the settings.
- Determine which of your application’s models should be editable in the admin interface.
admin 访问地址
http://localhost:yourport/admin/, by default.

为什么会让登录?哪来的用户信息?django自带了一套用户认证系统,admin就用了这个, 所以你想登录,先创建管理员账号。
|
1
|
python manage.py createsuperuser |
然后你就开心的登录进去了呀

发现只有这么个东西, 什么东东?
这就是django自带的用户认证系统的2张表,用于管理账户和账户组信息。
那接下来要干什么呢? 注意django admin的作用是让你管理各app下的数据库表,实现可以通过Web页面就完成对数据的增删改查噢。 admin不会没事闲的自己把你创建的表拿过来管理,你得把你写的表在admin里注册一下才行。
在每个app下有个admin.py文件 ,在那里面注册你想要被管理的表
|
1
2
3
4
5
6
7
8
9
|
from django.contrib import admin# Register your models here.from app01 import modelsadmin.site.register(models.Article)admin.site.register(models.Account) |
然后刷新下页面,新添加的2个表就出来了

admin定制
你可以定义每张表显示哪些字段、对某些字段进行过滤、允许搜索等功能,这就需要定制一下admin的类了
|
1
2
3
4
|
class ArticleAdmin(admin.ModelAdmin): list_display = ('title','pub_date','account','read_count') admin.site.register(Article, ArticleAdmin) |

一下子就好看了,真是神奇呀。
就喜欢你这没见识的样子,别急,还有很多nb的功能呢,一起来看下。
看来这个list_display就是定义表数据要展示哪些字段的,除了这个属性,admin 还提供了哪些其它功能呢?
fields 决定对表进行修改时展示哪些字段
|
1
2
3
|
class ArticleAdmin(admin.ModelAdmin): list_display = ('title','pub_date','account','read_count') fields = ['title','account','pub_date'] |

还可以多个字段显示在一行。
|
1
|
fields = ['title','account',('pub_date','read_count')] |

exclude 不展示哪些字段
date_hierarchy = 'pub_date' 按日期分类显示数据
You can also specify a field on a related model using the __ lookup, for example:
date_hierarchy = 'author__pub_date'
fieldsets 分组显示
|
1
2
3
4
5
6
7
8
9
10
11
|
class ArticleAdmin(admin.ModelAdmin): list_display = ('title','pub_date','account','read_count') date_hierarchy = 'pub_date' fieldsets = (('文章相关',{ 'fields':('title','content'), 'classes': ('wide', 'extrapretty'), }),('高级',{ 'classes':('collapse',), 'fields':(('account','read_count'),'pub_date') })) |

上面的classes 是用于设定字段样式,2个默认自带的样式是collapse 和wide
filter_horizontal,filter_vertical 均用于多对多字段
|
1
|
filter_horizontal = ['tags',] |
list_display 定义表数据显示哪些列
除了表中有的字段,models自己定义的字段也能放入list_display
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
from django.db import modelsfrom django.contrib import adminclass Person(models.Model): name = models.CharField(max_length=50) birthday = models.DateField() def decade_born_in(self): return self.birthday.strftime('%Y')[:3] + "0's" decade_born_in.short_description = 'Birth decade'class PersonAdmin(admin.ModelAdmin): list_display = ('name', 'decade_born_in') |
甚至还能玩出花样
from django.utils.html import format_html
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<br>class Tag(models.Model): """文章标签表""" name = models.CharField(max_length=64,unique=True) date = models.DateTimeField(auto_now_add=True) color_code = models.CharField(max_length=6) def colored_name(self): return format_html( '<span style="color: #{};">{}</span>', self.color_code, self.name, ) def __str__(self): return self.name |
|
1
2
|
class TagAdmin(admin.ModelAdmin): list_display = ['name','colored_name'] |

竟然出现了样式,神奇。
list_display_links = ('first_name', 'last_name') 点下这2个字段就跳到修改页
list_filter 过滤,把要过滤的字段放到对应列表里就可以
|
1
|
list_filter = ('register_date',) |
list_per_page = 20 每页显示20条数据
radio_fields 把外键或choice字段由下拉框变成单选框
|
1
2
3
4
5
|
class ArticleAdmin(admin.ModelAdmin): list_display = ('title','pub_date','account','read_count') date_hierarchy = 'pub_date' filter_horizontal = ['tags',] radio_fields = {'account': admin.VERTICAL} |

自动补全
autocomplete_fields = ['account',] 自动补全,外键查询数据多时,方便查找

raw_id_fields 言语无法表示的字段
就把外键变成这样子
readonly_fields = ('address_report',) 只读字段
search_fields 模糊查找
|
1
|
search_fields = ['account__username','title'] |

好啦,就先讲这些吧, 当然admin还有很多更高级的功能,不过先会这些就够了,以后会深入再讲的。
Django之 admin组件的更多相关文章
- python框架之Django(13)-admin组件
使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLED_APPS ...
- Django 之 admin组件使用&源码解析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED ...
- django之admin组件
一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test ...
- 模拟admin组件自己开发stark组件之创建篇
admin组件 admin组件为我们提供了针对django管理页面 我们先简短来看下django的admin组件的启动流程,注册流程,url匹配过程 启动注册 1. 扫描所有应用下的注册了应用中的ad ...
- Django admin 组件 原理分析与扩展使用 之 sites.py (一)
一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...
- Django admin组件使用
ADMIN 组件 介绍 admin 组件实现了更方便的WEB后台数据管理方式 settings.py 中第一个组件就是 : INSTALLED_APPS = [ 'django.contrib.adm ...
- Django admin组件源码流程
admin 组件 Django 自带的用户后台组件 用于用户便携的操作 admin 组件核心 启动 注册 设计url 启动核心代码 每个app 通过 apps.py 扫描 admin.py 文件 并执 ...
- stark组件之pop操作【模仿Django的admin】
一.先看下什么django的admin的pop到底是个什么东西 其实就是这么一个东西, a.在添加页面,在一对多和多对多的项后加了一个+号 b.点击这个加号,会弹出对应的添加 页面,在新的添加 c.添 ...
- stark组件之批量操作【模仿Django的admin】
一.先看下django的admin是如何实现批量操作 首先在配置类中定义一个函数 然后我们为这个函数对象设置一个属性,这个属性主要用来显示在select标签中显示的文本内容 最后把函数对象放到一个ac ...
随机推荐
- centos 8分区方案
https://www.cnblogs.com/yogurtwu/p/10717001.html https://zhuanlan.zhihu.com/p/126308255 常见目录解释 Linux ...
- os.remove() 删除文件
概述 os.remove() 方法用于删除指定路径的文件.如果指定的路径是一个目录,将抛出OSError. 在Unix, Windows中有效 语法 remove()方法语法格式如下: os.remo ...
- 搭建redis哨兵模式
搭建redis哨兵模式,一主两从三哨兵 1.从官网下载redis安装包:此处是redis-5.0.7.tar.gz 2.上传到目录 /utxt/soft 3.解压 4.cd /utxt/soft/ ...
- 01---eclipse使用
一.eclipse快捷键 1.alt+? 或 alt+/:自动补全代码或者提示代码,可用于main函数(main).输出函数(syso)等 2.ctrl+1:错误提示 3.ctrl+/:自动注释当前行 ...
- 【JMeter_16】JMeter逻辑控制器__随机控制器<Random Controller>
随机控制器<Random Controller> 业务逻辑: 当每次执行到该逻辑控制器时,随机挑选控制器下的任意一个子节点<取样器.逻辑控制器> Ignore sub-cont ...
- 浅谈async 及 await
async 及 await 涉及面试题:async 及 await 的特点,它们的优点和缺点分别是什么?await 原理是什么? 一个函数如果加上 async ,那么该函数就会返回一个 Promise ...
- Java 多线程基础(七)线程休眠 sleep
Java 多线程基础(七)线程休眠 sleep 一.线程休眠 sleep sleep() 方法定义在Thread.java中,是 static 修饰的静态方法.sleep() 的作用是让当前线程休眠, ...
- 循序渐进VUE+Element 前端应用开发(12)--- 整合ABP框架的前端登录处理
VUE+Element 前端是一个纯粹的前端处理,前面介绍了很多都是Vue+Element开发的基础,从本章随笔开始,就需要进入深水区了,需要结合ABP框架使用(如果不知道,请自行补习一下我的随笔:A ...
- 2.WebPack初始化
一.Package.json 在项目中输入: npm init 之后会提示你一步一步输入信息,我输入的信息如下: 生成的Package.json文件如下 我们也可以在初始时省略这些步骤,让脚本使用默认 ...
- vue入门的第一天:v-clock、v-text、v-html的使用
vue入门的第一天 1. v-cloak v-cloak可以解决插值闪烁问题(防止代码被人看见),在元素里加入 v-cloak即可 html: <p v-cloak>{{msg}}< ...


