美文网首页
Django学习笔记:Admin

Django学习笔记:Admin

作者: Py_Bird | 来源:发表于2018-12-24 13:37 被阅读0次

    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函数

    相关文章

      网友评论

          本文标题:Django学习笔记:Admin

          本文链接:https://www.haomeiwen.com/subject/phxzkqtx.html