Django Admin管理入门
Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的推荐用途仅限于组织的内部管理工具。它不是用于构建整个前端。
管理员有许多用于自定义的钩子,但要注意尝试专门使用这些钩子。如果您需要提供一个更加以流程为中心的接口来抽象出数据库表和字段的实现细节,那么可能是时候编写自己的视图了。
1 创建Django项目
django-admin startproject crm_v1
2 创建并注册app
python manage.py startapp bms
修改settings.py
INSTALLED_APPS = [
'django.contrib.admin',
......
'bms.apps.BmsConfig',
]
3 创建模型 modles.py
在 Django 里写一个数据库驱动的 Web 应用的第一步是定义模型 - 也就是数据库结构设计和附加的其它元数据。
设计哲学
模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循 DRY Principle 。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。
来介绍一下迁移 - 举个例子,不像 Ruby On Rails,Django 的迁移代码是由你的模型文件自动生成的,它本质上只是个历史记录,Django 可以用它来进行数据库的滚动更新,通过这种方式使其能够和当前的模型匹配。
from django.db import models class Publish(models.Model):
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField()
def __str__(self):
return self.name class Author(models.Model):
name = models.CharField(max_length=16)
age = models.IntegerField()
def __str__(self):
return self.name class Book(models.Model):
title = models.CharField(max_length=32)
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE)
pub_date = models.DateField()
price = models.DecimalField(max_digits=6, decimal_places=2)
author = models.ManyToManyField(to="Author")
state = models.IntegerField(choices=[(1, "已出版"), (2, "未出版")], default=1)
def __str__(self):
return self.title
4 数据库操作
为模型的改变生成迁移文件
python manage.py makemigrations
应用用数据库迁移
python manage.py migrate
数据库迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。
5 激活管理工具
通常我们在生成项目时会在 urls.py 中自动设置好,
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),]
6 创建超级用户
python manage.py createsuperuser

7 使用管理工具
启动Django项目
输入url:http://127.0.0.1:8000/admin
即可看到登录页面,输入刚才创建的用户名和密码进行登录

登录成功后可以看到如下页面

admin的定制
1 注册类
在admin.py中只需要将Mode中的某个类注册,即可在Admin中实现增删改查的功能
from django.contrib import admin
from django.contrib import adminfrom bms.models import Book,Publish,Author,AuthorDetail
admin.site.register(Book)
admin.site.register(Publish)
admin.site.register(Author)
以上是注册Book,Publilsh, Author类,在admin中即可看到

2 添加数据
通过点击add分别给author,book ,publish 添加数据


再创建书籍是可以看到一件有了出版社和作者的选择

3 查看book表数据

可以看到只要书籍名称,没有作者、价格、出版社等信息
4 定制列,显示更多的字段信息
需要利用ModelAdmin进行操作
class BookInfo(admin.ModelAdmin):
list_display = ['title', 'price', 'publish']
# list_displey 中的字段必须是和数据库中有的
admin.site.register(Book, BookInfo)
可以看到已经多了两列信息

5 显示多对多字段----author(作者姓名)
class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
list_display = ['title', "show_author", 'price', 'publish', 'state']
admin.site.register(Book, BookInfo)

6 list_filter,列表时,定制右侧快速筛选。
class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author'] # 列表中写筛选的字段
admin.site.register(Book, BookInfo)

7 search_fields 列表,模糊搜索的功能
class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author']
search_fields = ['author__name', 'price', 'title', 'publish__name']
# 由于 author是多对的字段,publish是外键,故不能直接写字段名,必须跨表查看
admin.site.register(Book, BookInfo)

8 自定义active
class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
list_display = ['title', "show_author", 'price', 'publish', 'state']
list_filter = ['publish', 'author']
search_fields = ['author__name', 'price', 'title', 'publish__name']
def func(self, request, queryset):
print(self, request, queryset)
print(request.POST.getlist("_selected_action"))
def price_to_zero(self, request, queryset):
queryset.update(price=0) # 把选择的价格都设置为0
func.short_description = "自定义action动作"
price_to_zero.short_description = "价格初始化"
# 设置在action下拉菜单中显示的信息
actions = [func, price_to_zero] # 把自定义的两个方法添加到actions中
# Action选项都是在页面上方显示
actions_on_top = True
# Action选项都是在页面下方显示
actions_on_bottom = False
admin.site.register(Book, BookInfo)
(1)选择刚才定义的action动作

可以看到后台的输出

(2)执行价格初始化动作

结果如下,可以看到价格已经设置为0

9 ordering 列表时,数据排序规则
设置根据id,价格排序,也可反向排序 return ['-title', 'price']
class BookInfo(admin.ModelAdmin):
......
def get_ordering(self, request):
return ['title', 'price']
点击title列或者price列即可进行排序

10 设置admin后台为中文显示
修改settings.py文件
将LANGUAGE_CODE = 'en-us'改为
LANGUAGE_CODE = 'zh-hans'

也可设置表的字段为中文,加上 verbose_name选项即可。
class Book(models.Model):
title = models.CharField(max_length=32,verbose_name="书名")
publish = models.ForeignKey(to="Publish", on_delete=models.CASCADE,verbose_name="出版社")
pub_date = models.DateField(verbose_name="出版日期")
price = models.DecimalField(max_digits=6, decimal_places=2,verbose_name="价格")
author = models.ManyToManyField(to="Author",verbose_name="作者")
state = models.IntegerField(choices=[(1, "已出版"), (2, "未出版")], default=1,verbose_name="状态") def __str__(self):
return self.title
效果如下:

SHOW AUTHOR还是英语的,现在来改一下
class BookInfo(admin.ModelAdmin):
def show_author(self, obj):
return " | ".join([author.name for author in obj.author.all()])
show_author.short_description = "作者"
short_description 设置字段的描述信息
最终结果如图

其他设置可参考 : https://www.cnblogs.com/yuanchenqi/articles/8323452.html
Django Admin管理入门的更多相关文章
- Django admin 管理工具
admin 组件的使用 Django 提供了基于 web 的管理工具.Django 自动管理工具是 django.contrib 的一部分. INSTALLED_APPS = [ 'django.co ...
- Django admin管理
admin的配置 admin是django强大功能之一,它能共从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功 ...
- Django——admin管理工具
一.admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...
- 吴裕雄--天生自然Django框架开发笔记:Django Admin 管理工具
Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.可以在项目的 settings.py 中的 INSTALLED_APPS 看到它: ...
- 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题
配置Django Admin,关于如何启用请参考Django官方文档<Activate the admin site>.但是我在配置过程中登录http://example.com/admi ...
- django admin管理后台中文添加问题
django版本号 1.7.8 #create database mydb character set utf8;#django-admin.py startproject mysite#设置sett ...
- 10.5Djang admin 管理工具
2018-10-5 17:30:57 Django admin 管理工具 参考连接: https://www.cnblogs.com/yuanchenqi/articles/8323452.html ...
- 01: 重写Django admin
目录: 1.1 重写Django admin项目各文件作用# 1.2 重写Django admin用户认证 1.3 将要显示的表注册到我们自己的kind_admin.py中 1.4 项目首页:显示注册 ...
- 你应该使用 Django admin 的 9 个理由(转)
你应该使用 Django admin 的 9 个理由 “问题是,我问到的每个人都持反对意见,他们认为 admin 只限于超级用户,很不灵活并且是难以定制.”—来自 Reddit 的 andybak 我 ...
随机推荐
- ELK 架构之 Elasticsearch 和 Kibana 安装配置
阅读目录: 1. ELK Stack 简介 2. 环境准备 3. 安装 Elasticsearch 4. 安装 Kibana 5. Kibana 使用 6. Elasticsearch 命令 最近在开 ...
- vue项目中解决type=”file“ change事件只执行一次的问题
问题描述 在最近的项目开发中遇到了这样的一个问题,当我上传了一个文件时,我将获取到的文件名清空后,却无法再次上传相同的文件 <template> <div class="h ...
- C语言检查ip是否合法
在工作当中我们经常会遇到这种问题:判断一个输入的字符串是否为合法的IP地址,下面是一个测试小程序: #include <stdio.h> #include <string.h> ...
- Notify和NotifyAll的区别?
Notify和NotifyAll都是用来对对象进行状态改变的方式,只是他们的作用域不太一样,从字面上就能看的出来,当对象被上锁之后,当其他的方法要去访问该对象中的数据,就需要该对象对其进行解锁,当然, ...
- 网络IO和磁盘IO详解
1. 缓存IO 缓存I/O又被称作标准I/O,大多数文件系统的默认I/O操作都是缓存I/O.在Linux的缓存I/O机制中,数据先从磁盘复制到内核空间的缓冲区,然后从内核空间缓冲区复制到应用程序的地址 ...
- 全局唯一ID发号器的几个思路
标识(ID / Identifier)是无处不在的,生成标识的主体是人,那么它就是一个命名过程,如果是计算机,那么它就是一个生成过程.如何保证分布式系统下,并行生成标识的唯一与标识的命名空间有着密不可 ...
- Socket Connect问题
一.非阻塞Connect对于Select时应注意的问题二.linux客户端socket非阻塞connect编程 一.非阻塞Connect对于Select时应注意的问题 对于面向连接的socket(SO ...
- PHP异步请求
正常情况下,PHP都是同步请求,脚本右上而下依次执行,必须等上一步请求好了,才能进行下一步操作,这种效率在某些时候是不必要的,如发送邮件等操作,是可以异步处理的. PHP异步也很不少插件,我们使用的是 ...
- 这样入门asp.net core 之 静态文件
本文章主要说明asp.net core中静态资源处理方案: 一.静态文件服务 首先明确contentRoot和webroot这两个概念 contentRoot:web的项目文件夹,其中包含webroo ...
- 数据结构的javascript实现
栈 栈(stack)又名堆栈,是一种遵循后进先出(LIFO)原则的有序集合.新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. functio ...