Django学习笔记:Admin

Admin基础

admin后台本质上是Django给我们提供的一个app。

环境配置

admin依赖以下四个模块,请确保它们存在于INSTALLED_APPS中:

django.contrib.auth

django.contrib.contenttypes

django.contrib.messages

django.contrib.sessions

并且要将django.contrib.admin加入到INSTALLED_APPS列表。

创建超级用户

python manage.py createsuperuser

要修改管理员的路由,安全起见,不能用默认的admin/路径。

修改超级用户密码

python manage.py shell

from django.contrib.auth.models import User

user = User.objects.get(username=’<用户名>’)

user.set_password(‘<新密码>’)

user.save()

python manage.py changepassword <用户名>

#修改指定的用户的密码(提供用户名)或修改当前系统用户密码(不提供用户名)

访问Admin界面

http://localhost:8000/admin/

注册数据表

在admin.py中:

admin.site.register(<表>)     #一次只能注册一个类



ModelAdmin类

对于每个模型,可创建一个对应的ModelAdmin类,这个类的属性就是模型的所有自定义设置。

class <类名>Admin(admin.ModelAdmin):

    #设置ModelAdmin属性...


admin.site.register(<表>, <表>Admin)        #将数据表和它的ModelAdmin类绑定注册


@admin.register(<表>):                      #第二种方法,装饰器注册

class <表>Admin(admin.ModelAdmin):

    #设置ModelAdmin属性...


ModelAdmin的属性

list_display

在实例的修改界面横排显示指定的字段。

list_display = (‘<字段1>’, ‘<字段2>’, ...)


list_filter

在实例的列表界面显示一个FILTER右边栏,用指定的字段进行分类。

可分类的字段:BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey、ManyToManyField

list_filter = [‘<字段1>’, ‘<字段2>’, ...]


search_fields

在实例的列表界面添加搜索框,在指定字段的范围内搜索。

search_fields = [‘<字段1>’, ‘<字段2>’, ...]       #字段为CharField和TextField


actions

一个包含自定义行为的列表。


actions_on_top

默认为True,在页面的列表上方显示actions下拉框。


actions_on_bottom

默认为False,当为True时,在页面的列表下方显示actions下拉框。


actions_selection_counter

默认为True,在action下拉框右侧显示选中的对象数量。


date_hierarchy

指定一个日期型字段,为页面创建一个通过日期过滤对象的时间导航栏。

date_hierarchy = ‘date’


empty_value_display

设置类中的空值字段的默认显示内容(如None,空字符串等),默认是’-’。

empty_value_display = ‘-empty-’

可以设置全局的字段空值的默认显示内容:

admin.site.empty_value_display = ‘-empty-’     #这是一行新代码,并不在类中缩进!


exclude

对指定的字段排除显示。

exclude = ('<字段1>', ‘<字段2>’, ...)


fields

指定显示的字段,其顺序也是字段在Admin后台显示的顺序。

fields = ('<字段1>', ‘<字段2>’, ...)

可以组合元组,让几个字段在同一行显示,如:

fields = ( ('<字段1>', ‘<字段2>’), ‘<字段3>’, ...)


fieldsets

根据字段对页面进行分组显示,传入二元元组,其中每个元组代表一个分组。

fieldsets = (

    (‘<分组标题A>’, {                          # <分组标题>可用None表示无标题

        ‘fields’: (‘<字段1>’, ‘<字段2>’, ...)

        } ),

    (‘<分组标题B>’, {

        ‘fields’: (‘<字段3>’,)

    } ),

    ...

)

显示样式:

分组标题A

字段1

字段2

...

分组标题B

字段3

...

fields同样可以组合元组,让几个字段在同一行显示:

fields = ( ('<字段1>', ‘<字段2>’), ‘<字段3>’, ...)

跟’fields’同级别的属性:

‘classes’: (‘wide’, ‘collaspe’)

一个包含额外CSS类的元组,wide让分组具备更宽的水平空间,collaspe将整个分组折叠。

‘description’

一个可选的额外说明文本,放在每个分组的顶部,如果内部有HTML语法将不被转义。


filter_horizontal

将指定的多对多字段分成水平两部分显示(默认是一个选择框)。


filter_vertical

将指定的多对多字段分成垂直两部分显示(默认是一个选择框)。


form

编写自定义的ModelForm,用于添加/修改页面的表单。


list_editable

指定在修改页面中可以直接编辑的字段,指定的字段将显示为编辑框。

只能设置list_display中的字段。


list_max_show_all

指定一个数值,当列表元素总数大于该值时,显示为“show all”链接,默认为200。


list_per_page

设置每页显示的元素个数,默认为100。


list_select_related

使用select_related()方法查询数据,可以减少数据库访问,默认为False(只对ForeighKey字段调用),当为True时始终调用。

可以传入元组或列表,指定用select_related()查询的字段。

list_select_related = (‘<字段1>’, ‘<字段2>’, ...)


ordering

设置排序方式,传入元组或列表。


radio_fields

用选项展示ForeighKey字段。


save_as

默认为False,显示为“保存并添加另一个”按钮,当为True时变成“保存为新对象”按钮。


save_as_continue

默认为True,在保存新对象后跳转到修改页面,当为False时,跳转到元素列表页面。


save_on_top

默认为False,当为True时,页面顶部会提供同样的一系列保存按钮。


show_full_result_count

默认为True,显示过滤后的对象的总数,如“99 results (143 total)”,对整个表进行count()操作,如果数据表很大,会耗费一定的资源;当为False时显示为“99 results (show all)“。


#将子表的数据放在主表数据中编辑,此时主表字段下面提供n组相关联的子表字段

class <子表名>InLine(admin.StackedInLine):   #可继承admin.TabularInLine进行扁平化显示

    model = <子表名>

    extra = <编辑的子表数>


class <主表名>Admin(admin.ModelAdmin):

    inlines = [<子表名>InLine]



自定义Admin首页

修改Admin页面顶端的显示文字:

在admin.py中:

django.contrib.admin.AdminSite.site_header = ‘xxx’


修改Admin首页模板:

写入”项目根目录/templates/admin/base_site.html“的模板,见templates笔记第1页。



自定义Admin的Action操作

Action操作用于修改大量的目标,可以编写action函数来自定义该操作。

①在ModelAdmin类中添加属性:

actions = [‘<函数名>’]               #将action函数预先添加到ModelAdmin中

②编写action函数

action函数必须携带三个参数:当前的ModelAdmin、request、被选择的QuerySet对象。

在ModelAdmin类中继续①的代码:

def <函数名>(self, request, queryset):      #用self访问ModelAdmin类本身

    for obj in queryset:

        #对Queryset进行修改...

    self.message_user(request, ‘xxxx’)     #为操作添加提示信息,xxxx显示为页面顶部绿色行

<函数名>.short_description = ‘xxx’      #对函数添加描述,显示为Action下拉列表中的名称,

下拉列表中默认显示为函数名


action函数的全站引用与禁用

admin.site.add_action(<函数名>)          #将action函数作用于整个admin站点

admin.site.disable_action(<函数名>)        #将action函数全站禁用

#全站禁用的action函数也可以添加到某个ModelAdmin类的action属性中,进行显式的引用

class <类名>Admin(admin.ModelAdmin):

    actions = None                      #禁用该模型中的所有action函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容

  • The Django admin site Django中一个最强大的部分是自动管理接口,在模型中读取元数据来提供...
    常大鹏阅读 29,174评论 2 18
  • admin.py 数据库内容管理 from django.contrib import admin from ap...
    陆文斌阅读 99评论 0 0
  • 切换到创建项目的目录 cd C:\Users\admin\Desktop\DjangoProject创建名为pr...
    在努力中阅读 3,246评论 2 3
  • 一、Django简介 Django是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网...
    仙灵儿阅读 3,463评论 0 5
  • 前天晚上,弟弟电话里说,爸爸有点不舒服:中午睡了很长时间,起床后把下午当作早晨,焦急的开始做早餐🥣…… 突然有点害...
    张静君的私密日记阅读 409评论 0 0