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 ...
随机推荐
- Windows下C,C++开发环境搭建指南
Windows下C,C++开发环境搭建指南 前情提要 基于近一段时间很多网友发邮件反馈,说一些项目编译出现问题,诸如此类的情况. 就觉得很有必要写一篇C,C++开发环境的小指南,统一回复. 1.君欲善 ...
- @loj - 3046@「ZJOI2019」语言
目录 @description@ @solution@ @accepted code@ @details@ @description@ 九条可怜是一个喜欢规律的女孩子.按照规律,第二题应该是一道和数据 ...
- (二)Java编程基础
目录 一.关键字与保留字 二.标识符与变量 三.基本数据类型的转换 四.运算符 五.分支语句 五.循环语句 六.跳转语句 七.Java从键盘读取输入 一.关键字与保留字 定义:①关键字:Java关键字 ...
- VMWare虚拟机开启时显示模块“Disk”启动失败的解决方案
找到虚拟机所在的目录, 将 .vmx文件打开 将文件vmci0.present = "TRUE"改为 vmci0.present = "FALSE" 删除以.l ...
- Mybaties概述
- loads和dumps的用法
import json s='{"name":"wuxie","sex":"m","data":nu ...
- 域名注册诈骗邮件We are an agency engaging in registering brand name and domain names
最近收到了一封自称是某公司的邮件,说有人要注册我已经申请的域名,需要我回复确认,看邮件发件人是个人邮箱,通篇没有提到公司,也不是什么正规机构,大概率就是诈骗邮件了. 为了完全确认这封诈骗邮件,我登陆了 ...
- Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...
- EnvironmentPostProcessor
概览 SpringBoot支持动态的读取文件,留下的扩展接口 org.springframework.boot.env.EnvironmentPostProcessor,进行配置文件的集中管理,从而避 ...
- JavaScript图形实例:Koch曲线
Koch曲线的构造过程是:取一条长度为L0的直线段,将其三等分,保留两端的线段,将中间的一段改换成夹角为60度的两个等长直线:再将长度为L0/3的4个直线段分别进行三等分,并将它们中间的一段均改换成夹 ...


