Django_admin组件
1、Django_admin组件的意义
作者:Eric 微信:loveoracle11g
新建Django项目bms图书管理系统
App为book
book/models.py添加表关系
from django.db import models # Create your models here. class Author(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() class Publish(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField() class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) # 与Publish表建立一对多的关系,外键字段建立在多的一方 publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE) # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表 authors = models.ManyToManyField(to="Author",)
敲两条命令迁移数据
F:\深圳骑士计划\crm\bms>python manage.py makemigrations Migrations for 'book': book\migrations\0001_initial.py - Create model Author - Create model AuthorDetail - Create model Book - Create model Publish - Add field publish to book - Add field authorDetail to author F:\深圳骑士计划\crm\bms>python manage.py migrate Operations to perform: Apply all migrations: admin, auth, book, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying book.0001_initial... OK Applying sessions.0001_initial... OK
多出了一个db.sqlite3文件
http://127.0.0.1:8000/admin
它给我跳转到登录界面了,它里面用的是redirect
打开Run manage.py Task
输入命令创建超级用户
manage.py@bms > createsuperuser 输入用户名:yuan 邮箱:不写 输入密码:yuan1234 再次输入密码:yuan1234
manage.py@bms > createsuperuser "D:\Pycharm\PyCharm 2018.3.2\bin\runnerw64.exe" C:\Python36\python.exe "D:\Pycharm\PyCharm 2018.3.2\helpers\pycharm\django_manage.py" createsuperuser F:/深圳骑士计划/crm/bms Tracking file by folder pattern: migrations Username (leave blank to use 'zhouwanchun'): yuan Email address: Warning: Password input may be echoed. Password: yuan1234 Warning: Password input may be echoed. Password (again): yuan1234 Superuser created successfully.
那我们就可以登录了
在book/admin.py
from django.contrib import admin # Register your models here. # from .models import Book, Publish, Author from book.models import Book, Publish, Author admin.site.register(Book) admin.site.register(Publish) admin.site.register(Author)
接下来项目重启,刷新浏览器
BOOK就是App应用
下面有三张表Authors、Books、Publishs
点击Publishs表,里面什么都没有,可以自己添加数据行,点击ADD PUBLISH
在book/models.py里面的class Publish下面添加 def __str__(self): return self.name
再来添加出版社
回到 http://127.0.0.1:8000/admin/
点击 Publishs
再随便点击一个出版社,比如橘子出版社,发现有删除功能了
点击Delete,然后Yes I'm sure. 把这个橘子出版社就删除了。
看文件数据库这边跟着同步信息了
我们再把 橘子出版社 添加过来
回到首页 http://127.0.0.1:8000/admin/
点击 Authors表,添加ADD AUTHOR
在book/models.py里面的class Author下面添加 def __str__(self): return self.name
再来添加一个作者,太白 20岁
点击Alex,可以删除,可以修改,那我们修改Alex为35岁
回到首页 http://127.0.0.1:8000/admin/
点击Books, 添加ADD BOOK
在book/models.py里面的class Book下面添加 def __str__(self): return self.title
再添加一个书籍《三国演义》,但是我想让它加入到西瓜出版社,可以直接创建西瓜出版社
再来添加一本书籍《金瓶煤》
在book/admin.py添加修改
from django.contrib import admin # Register your models here. # from .models import Book, Publish, Author from book.models import Book, Publish, Author class BookConfig(admin.ModelAdmin): list_display = ["title", "publishDate", "price", "publish"] admin.site.register(Book, BookConfig) # 意思是你展示Book时要听BookConfig的 admin.site.register(Publish) admin.site.register(Author)
重启项目,刷新浏览器
这里还有一个批量删除功能
2、Django_admin组件的自定制列
我们再来创建一个App manage.py@bms > startapp app01
项目配置文件注册
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book.apps.BookConfig', 'app01', ]
在app01/models.py里写
from django.db import models # Create your models here. class Host(models.Model): name = models.CharField(max_length=32)
然后迁移数据
F:\深圳骑士计划\crm\bms>python manage.py makemigrations Migrations for 'app01': app01\migrations\0001_initial.py - Create model Host F:\深圳骑士计划\crm\bms>python manage.py migrate Operations to perform: Apply all migrations: admin, app01, auth, book, contenttypes, sessions Running migrations: Applying app01.0001_initial... OK
在app01/admin.py里面写
from django.contrib import admin # Register your models here. from .models import Host admin.site.register(Host)
然后重启项目,浏览器访问项目首页
查看页面:http://127.0.0.1:8000/admin/app01/host/ 添加页面:http://127.0.0.1:8000/admin/app01/host/add/ 编辑页面:http://127.0.0.1:8000/admin/app01/host/1/change/ host后面数字1不固定 编辑页面:http://127.0.0.1:8000/admin/app01/host/2/change/ 删除页面:http://127.0.0.1:8000/admin/app01/host/2/delete/
在book/admin.py里写,自定制显示列
from django.contrib import admin # Register your models here. # from .models import Book, Publish, Author from book.models import Book, Publish, Author class BookConfig(admin.ModelAdmin): list_display = ["title", "publishDate", "price", "publish"] class PublishConfig(admin.ModelAdmin): list_display = ["name", "city", "email"] admin.site.register(Book, BookConfig) # 意思是你展示Book时要听BookConfig的 admin.site.register(Publish, PublishConfig) admin.site.register(Author)
重启项目,浏览器访问 http://127.0.0.1:8000/admin/book/publish/
自定制显示列,多对多
from django.contrib import admin # Register your models here. # from .models import Book, Publish, Author from book.models import Book, Publish, Author class BookConfig(admin.ModelAdmin): # 自定制显示列 def show_authors(self, obj): return " , ".join([obj.name for obj in obj.authors.all()]) list_display = ["title", "publishDate", "price", "publish", "show_authors"] class PublishConfig(admin.ModelAdmin): list_display = ["name", "city", "email"] admin.site.register(Book, BookConfig) # 意思是你展示Book时要听BookConfig的 admin.site.register(Publish, PublishConfig) admin.site.register(Author)
重启项目,浏览器访问: http://127.0.0.1:8000/admin/book/book
在book/models.py里面的class Book添加修改
class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField(max_length=32) publishDate = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) state = models.IntegerField(choices=[(1, "已出版"), (0, "未出版")], default=1) # 与Publish表建立一对一的关系,外键字段建立在多的一方 publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE) # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表 authors = models.ManyToManyField(to="Author",) def __str__(self): return self.title
执行数据迁移
manage.py@bms > makemigrations manage.py@bms > migrate
在book/admin.py里添加修改class BookConfig
class BookConfig(admin.ModelAdmin): # 自定制显示列 def show_authors(self, obj): return " , ".join([obj.name for obj in obj.authors.all()]) list_display = ["title", "publishDate", "price", "publish", "show_authors", "state"]
重启项目,浏览器刷新访问
嘿!它自己给我展示出来了"已出版",现在我就想让它展示数据库里面存的那个值
在book/admin.py里面添加修改
class BookConfig(admin.ModelAdmin): # 自定制显示列 def show_authors(self, obj): return " , ".join([obj.name for obj in obj.authors.all()]) def show_state(self, obj): return obj.state list_display = ["title", "publishDate", "price", "publish", "show_authors", "state", "show_state"]
重启项目,刷新浏览器访问
你要是这样写的话
def show_state(self, obj): # return obj.state return obj.get_state_display()
是不是和左边的state显示一样了呀
3、Django_admin组件的其他功能
我们设备按着日期时间超链接
class BookConfig(admin.ModelAdmin): # 自定制显示列 def show_authors(self, obj): return " , ".join([obj.name for obj in obj.authors.all()]) def show_state(self, obj): # return obj.state return obj.get_state_display() list_display = ["title", "publishDate", "price", "publish", "show_authors", "state", "show_state"] list_display_links = ["publishDate",]
重启项目,刷新浏览器
想加几个加几个超链接
list_display = ["title", "publishDate", "price", "publish", "show_authors", "state", "show_state"] list_display_links = ["title", "publishDate"]
重启项目,刷新浏览器
添加搜索框功能
list_display = ["title", "publishDate", "price", "publish", "show_authors", "state", "show_state"] list_display_links = ["title", "publishDate"] search_fields = ["title"]
搜索三国,看三国演义出来了吧。
批量处理功能
list_display = ["title", "publishDate", "price", "publish", "show_authors", "state", "show_state"] list_display_links = ["title", "publishDate"] search_fields = ["title"] # action操作 def patch_init(self, request, queryset): print("OK") patch_init.short_description = "批量处理" # 起个中文名字 actions = [patch_init]
批量处理书籍的价格
# action操作 def patch_init(self, request, queryset): print("OK") queryset.update(price=0) patch_init.short_description = "价格初始化为0元" # 起个中文名字 actions = [patch_init]
多级过滤框
list_filter = ["publish"]
它是可以放多对多字段的 list_filter = ["publish", "authors"]
排序,按照书籍的价格,首先你要编辑所有书籍的价格,因为刚才价格重置为0了
ordering = ["price"] # 默认升序
ordering = ["-price"] # 降序排列
ordering = ["-price", "-nid"] # 如果价格一样,可以按照id排列
change_list_template = "index.html" # 以后前端工程师写好了网页,你拿过来放在templates目录里直接用就行了。现在Django用的自己html文件
本节课内容写完
Django_admin组件的更多相关文章
- Django学习---Form组件认证
Form组件认证 能够帮助我们做用户认证. 以前写我们自己写用户认证的时候,我们自己写HTML的form表单,点击提交,数据就被发送到后台,后台进行验证.在验证过程中我们就需要自己去写正则表达式去匹配 ...
- ExtJS 4.2 评分组件
上一文章是扩展ExtJS自带的Date组件.在这里将创建一个评分组件. 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2上的一个RatingStar ...
- react组件的生命周期
写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...
- react-router 组件式配置与对象式配置小区别
1. react-router 对象式配置 和 组件式配置 组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...
- Angular2入门系列教程3-多个组件,主从关系
上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...
- Angular2入门系列教程2-项目初体验-编写自己的第一个组件
上一篇 使用Angular-cli搭建Angular2开发环境 Angular2采用组件的编写模式,或者说,Angular2必须使用组件编写,没有组件,你甚至不能将Angular2项目启动起来 紧接着 ...
- .NET Core 首例 Office 开源跨平台组件(NPOI Core)
前言 最近项目中,需要使用到 Excel 导出,找了一圈发现没有适用于 .NET Core的,不依赖Office和操作系统限制的 Office 组件,于是萌生了把 NPOI 适配并移植到 .NET C ...
- .NetCore中的日志(1)日志组件解析
.NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...
- BootStrap_02之全局样式及组件
1.BootStrap指定的四种屏幕尺寸: ①超大PC屏幕--lg(large):w>=1200px: ②中等PC屏幕--md(medium):1200px>w>=992px: ③P ...
随机推荐
- Qt 布局管理
在布局编辑环境里: sizePolicy 影响控件在布局上的大小. layout 的属性 如:如margin 设置控件在布局上边距. 有时候需要设置 下面是一个 代码布局的方式 #include &q ...
- Faster-RCNN 自己的数据训练
参考网址:https://blog.csdn.net/l297969586/article/category/7178545(一呆飞仙)Faster-RCNN_TF代码解读,参考网址:https:// ...
- n阶楼梯,一次走1,2,3步,求多少种不同走法
##已知n阶楼梯,一次可以迈1,2,3步.求所有走法## 如果要列出走法,时间复杂度太高,O(n)=2**n,前两个函数遍历走法.## 如果只是单纯列出走法数量,就简单多了,也但是很容易内存爆表. # ...
- web roadmap
- nodejs -- require , exports , module
1. require , exports . -------------------------- 文件: 1) index.js //两种方式都可以: var forExports = requir ...
- python day27--常用模块 time,random,os,序列化
一.time模块 %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I ...
- 13--Python入门--文件读写--CSV&Excel文件
EXCEL文件 import pandas as pd excel=pd.read_excel('read_excel.xlsx') print(excel) CSV文件 import pandas ...
- L2-020. 功夫传人*
L2-020. 功夫传人 参考博客 #include<vector> #include<cstring> #include<algorithm> using nam ...
- MYSQL数据模型
DROP TABLE IF EXISTS `sh_category`; CREATE TABLE `sh_category` ( `id` int(11) NOT NULL AUTO_INCREMEN ...
- leetcode 3.Longest Substring Without Repeating Charcters
在一个字符串中寻找出最长的无重复字符的子串的,在不断的后续检索中需要去掉前面一个重复的字符,那么就是需要记录之前所出现过的字符的,在这里需要利用hashmap来记录字符和其出现的位置之间的映射关系的, ...