Django学习笔记2 【自定义你的admin】
2018-02-11 13:15
645 查看
一.概述
本章内容为根据自己课设项目所需要的后台管理部分进行各种配置,所设置的admin配置知识在django官网中的1.11文档部分均可找到,写这篇的目的是为了优化django admin的使用。环境说明:
Django:1.11
python版本:3.4.4
操作系统:win10_1709_pro
二.表结构
数据库的表结构非常简单如下bikedata表:
+--------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | bikeIp | varchar(50) | NO | | NULL | | +--------+-------------+------+-----+---------+----------------+
bikelocation表:
+---------------+---------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | bikeLongitude | double | NO | | NULL | | | bikeLatitude | double | NO | | NULL | | | bikeId_id | int(11) | NO | MUL | NULL | | +---------------+---------+------+-----+---------+----------------+
其中bikelocation表中的bikeID_id字段引用了bikedata表为外键
三.一步一步优化你的admin
1.数据库内表项无法区分
我在bikelocation数据库中添加了两行数据然而在admin中打开会发现我没有直接的办法区别他们,只能点击进去后才可以分辨,这是很不合理的,看了下他们显示的字符正好与类bikeLocation的实例输出后的结果是一致的,想到这里问题就简单了,将model的类中添加一个str方法即可。
修改后的model如下:
class bikeData(models.Model): bikeIp = models.CharField(max_length=50) def __str__(self): str(return self.bikeIp) class bikeLocation(models.Model): bikeId = models.ForeignKey(bikeData) bikeLongitude = models.FloatField() bikeLatitude = models.FloatField() def __str__(self): return str(self.bikeId)
修改后的admin显示如下:
从原理上讲,我们是重写了model中的
__str__方法使得当使用model对象的输出属性时候,不是输出默认的
xxx object,而是我们重写的方法中所定制返回的东西,后面会有一些更方便的admin设置来让这里的显示更丰富。
现在我们可以基本区分数据库中每一行了,当我们想添加更多数据在每一行上时我们直接修改
__str__方法即可。现在我们引入一种新的方法,使用admin配置文件。
首先在你的某个app目录下创建admin.py文件,下面展示了admin.py的一个基本模板
from django.contrib import admin from main_site.models import bikeData, bikeLocation # Register your models here. @admin.register(bikeData) class bikeDataAdmin(admin.ModelAdmin): list_display = ('bikeIp',) @admin.register(bikeLocation) class bikeLocationAdmin(admin.ModelAdmin): list_display = ('bikeId', 'bikeLongitude', 'bikeLatitude') # 将表项以表格的形式展示出来,传递的参数是每一行中显示的列 # admin.site.register(bikeData, bikeDataAdmin) # admin.site.register(bikeLocation, bikeLocationAdmin)
创建的类继承了admin.ModelAdmin后就可以对相应的admin文件进行修改了,为了具体到是对哪个model的页面,我们还要对相应的类进行注册,方法有两种,一种是装饰器。
这里使用了list_display属性,我们直接看使用效果
根据显示的结果,我们知道,只要在list_display中注册过的列都会在admin中显示,直接覆盖了刚才修改的
__str__方法。
2.在list_display基础上继续优化
这样修改过的admin在显示上已经比一开始的好很多了,现在我们希望添加一些花样,细心的朋友发现上一张截图中,BIKEID这一列的表项是蓝色的,为蓝色的这样一列可以点击从而进入修改界面。我们如果想让其他列为蓝色,只要使用list_display_links即可
@admin.register(bikeLocation) class bikeLocationAdmin(admin.ModelAdmin): list_display = ('bikeId', 'bikeLongitude', 'bikeLatitude') # 将表项以表格的形式展示出来,传递的参数是每一行中显示的列 list_display_links = ('bikeLongitude','bikeLatitude') # 选择"list_display"哪个项目可以点击进入修改界面,默认是第一个索引
修改后后两列变成蓝色,点击即可进入修改界面。
这一列我们改了半天只是修改了相应的显示,我们现在想进行编辑可以吗,当然可以admin配置文件提供
list_editable来进行对一行中某列的修改,但是这个方法中所注册的列不能在
list_display_link中出现过
@admin.register(bikeLocation) class bikeLocationAdmin(admin.ModelAdmin): list_display = ('bikeId', 'bikeLongitude', 'bikeLatitude') # 将表项以表格的形式展示出来,传递的参数是每一行中显示的列 list_display_links = ('bikeId',) # 选择"list_display"哪个项目可以点击进入修改界面,默认是第一个索引 list_editable = ( 'bikeLongitude', 'bikeLatitude',) # 可以直接在表项的目录中对数据进行修改,注意的是,某列不能同时出现在list_display_link与link_editable同时出现
结果如下
直接在这个界面就可以进行修改,十分方便
3.开始配置修改界面
我们先通过模板界面的蓝色处点击进入未配置过的修改界面首先依旧是对显示的修改,默认情况下,我们可以在修改界面中修改每一行的所有列,使用
fields属性即可自定义修改界面中可以显示的列
@admin.register(bikeLocation) class bikeLocationAdmin(admin.ModelAdmin): list_display = ('bikeId', 'bikeLongitude', 'bikeLatitude') # 将表项以表格的形式展示出来,传递的参数是每一行中显示的列 list_display_links = ('bikeId',) # 选择"list_display"哪个项目可以点击进入修改界面,默认是第一个索引 list_editable = ( 'bikeLongitude', 'bikeLatitude',) # 可以直接在表项的目录中对数据进行修改,注意的是,某列不能同时出现在list_display_lists与link_editable同时出现 fields = ('bikeLongitude', 'bikeLatitude', )
我们这样修改后现在这可以修改两个列
fields中还有一些小技巧,比如我们想让BikeLongituude和BikeLatitude列在一行中显示我们直接将这两个放在一个额外元组中即可
fields = (('bikeLongitude', 'bikeLatitude', ),)
4.其他修改
list_display_links = None
如果该项为
None那么我们也就无法进入修改界面了
如上图所示,没有蓝色的项
actions_selection_counter = False
这个选项用来屏蔽图中黄色的部分,如果为False也就不显示多少个中几个被选中
actions_on_bottom = True actions_on_top = False
这两个选项可以改变动作菜单的位置,默认是只有一个在上面,如果两个都为True那么就是上下各有一个动作菜单,如下。
5.django admin的汉化
修改setting配置文件中的LANGUAGE_CODE字段就可以进行汉化
相关文章推荐
- django学习笔记---第六章:Admin
- 【django 学习笔记】05-admin
- Django 学习笔记 - Simple Blog 1 - Django 数据库和admin设置
- python 学习笔记十八 django深入学习三 分页,自定义标签,权限机制
- python Django 学习笔记(五)—— Django admin自动管理界面
- Django搭建简单网页的学习笔记 之二(admin)
- The Django Book学习笔记 06 admin
- Django学习笔记之【激活管理(admin)界面】
- Django学习笔记(4) -- Admin模块添加富文本编辑器kindeditor
- Django学习笔记之【管理(admin)界面设置】
- Django 开发学习笔记(2)- 请求一个自定义的路径,得到一个返回
- Django学习笔记(四)--admin的配置与应用
- Django学习笔记 — 自定义User模型
- Django学习笔记 自定义标签
- Django 开发学习笔记(3)- 编写自定义的页面
- django学习笔记---如何自定义中间件详解
- django 自定义 admin的list_filter
- joomla3.4.1学习笔记(一)——后台显示自定义模板
- Django框架学习笔记(25.Form组件验证)
- VSTO 学习笔记(十二)自定义公式与Ribbon