第二十课 Django Admin后台管理

第二十课 Admin后台管理

1. admin创建用户

创建管理员账号:


python manage.py createsuperuser

# 按提示输入用户名、邮箱、密码

2. 注册模型

如果只是在admin中简单的展示及管理模型,需要在admin.py模块中使用admin.site.register将模型注册:


from django.contrib import admin

from myproject.myapp.models import Author



admin.site.register(Author)

但是,有时候我们需要对admin进行各种深度定制,以满足我们的需求。这就要使用Django为我们提供的ModelAdmin类了,例子:


from django.contrib import admin

from myproject.myapp.models import Author



# 创建一个ModelAdmin的子类

class AuthorAdmin(admin.ModelAdmin):

    pass



# 注册的时候,将原模型和ModelAdmin耦合起来

admin.site.register(Author, AuthorAdmin)

3. 用装饰器注册注册模型

除了常用的admin.site.register(Author,AuthorAdmin)方式进行注册,还可以用装饰器的方式连接模型和ModelAdmin。例如:


from django.contrib import admin

from .models import Author



@admin.register(Author)

class AuthorAdmin(admin.ModelAdmin):

    pass

这个装饰器可以接收一些模型类作为参数,以及一个可选的关键字参数site,例如:


from django.contrib import admin

from .models import Author, Reader, Editor

from myproject.admin_site import custom_admin_site



@admin.register(Author, Reader, Editor, site=custom_admin_site)

class PersonAdmin(admin.ModelAdmin):

    pass

4. ModelAdmin的属性

ModelAdmin非常灵活,它有许多内置属性,帮助我们自定义admin的界面和功能

(1)ModelAdmin.actions

一个列表,包含自定义的actions

(2)ModelAdmin.actions_on_top

是否在列表上方显示actions的下拉框,默认为True

(3)ModelAdmin.actions_on_bottom

是否在列表下方显示actions的下拉框,默认为False。效果见下面的图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4e8xBdnl-1608304247316)(/home/pyvip/py_case/python 笔记/图片/1762677-20201006091152267-1732573258.png)]

(4)ModelAdmin.actions_selection_counter

是否在actions下拉框右侧显示选中的对象的数量,默认为True,可改为False

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QcM1eQ98-1608304247318)(/home/pyvip/py_case/python 笔记/图片/1762677-20201006091201243-284760212.png)]

(5)ModelAdmin.date_hierarchy

根据你指定的日期相关的字段,为页面创建一个时间导航栏,可通过日期过滤对象。例如:


date_hierarchy = 'pub_date'

它的效果如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JdmjRu7N-1608304247319)(/home/pyvip/py_case/python 笔记/图片/1762677-20201006091206305-1467394714.png)]

也可以指定为关联的日期字段:


date_hierarchy = 'author__pub_date'

(6)ModelAdmin.empty_value_display

指定空白显示的内容。如果有些字段没有值,默认情况下会显示破折号“-”。这个选项可以让你自定义显示什么,例如:


from django.contrib import admin



class AuthorAdmin(admin.ModelAdmin):

    empty_value_display = '-empty-'

还可以为整个admin站点设置默认空白显示值,通过设置AdminSite.empty_value_display="xxxxxxx"。甚至为某个函数设置空白值,如下:


from django.contrib import admin



class AuthorAdmin(admin.ModelAdmin):

    fields = ('name', 'title', 'view_birth_date')



    def view_birth_date(self, obj):

        return obj.birth_date

    # 注意下面这句

    view_birth_date.empty_value_display = '???'

(7)ModelAdmin.exclude

不显示指定的某些字段

如下例有这么个模型:


from django.db import models



class Author(models.Model):

    name = models.CharField(max_length=100)

    title = models.CharField(max_length=3)

    birth_date = models.DateField(blank=True, null=True)

如果你不希望在页面内显示birth_date字段,那么这么设置:


from django.contrib import admin



class AuthorAdmin(admin.ModelAdmin):

    fields = ('name', 'title')

和这么设置是一样的:


from django.contrib import admin



class AuthorAdmin(admin.ModelAdmin):

    exclude = ('birth_date',)

(8)ModelAdmin.fields

按顺序显示指定的字段

可以通过组合元组的方式,让某些字段在同一行内显示。例如下面的做法“url”和“title”将在一行内,而“content”则在下一行:


class FlatPageAdmin(admin.ModelAdmin):

    fields = (('url', 'title'), 'content')

如果没有对field或fieldsets选项进行定义,那么Django将按照模型定义中的顺序,每一行显示一个字段的方式,逐个显示所有的非AutoField和editable=True的字段

(9)ModelAdmin.fieldsets

根据字段对页面进行分组显示或布局,fieldsets是一个二元元组的列表。每个二元元组代表一个<fieldset>

二元元组的格式为(name,field_options),name是一个表示该filedset标题的字符串,field_options是一个包含在该filedset内的字段列表。例如:


from django.contrib import admin



class FlatPageAdmin(admin.ModelAdmin):

    fieldsets = (

        (None, {
   

            'fields': ('url', 'title', 'content', 'sites')

        }),

        ('Advanced options', {
   

            'classes': ('collapse',),

            'fields': ('registration_required', 'template_name'),

        }),

    )

它的页面看起来像下面的样子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j8BhVJPf-1608304247321)(/home/pyvip/py_case/python 笔记/图片/1762677-20201006091218653-1760961744.png)]

filed_options字典内,可以使用下面这些关键字:

fields:一个必填的元组,包含要在fieldset中显示的字段。例如:


{
   

'fields': ('first_name', 'last_name', 'address', 'city', 'state'),

}

同样,它也可以像前面那样通过组合元组,实现多个字段在一行内的效果:


{
   

'fields': (('first_name', 'last_name'), 'address', 'city', 'state'),

}

fileds可以包含readonly_fields的值,作为只读字段。

classes:一个包含额外的CSS类的元组,例如:


{
   

'classes': ('wide', 'extrapretty'),

}

两个比较有用的样式是collaspe

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值