Django admin使用

 Django 提供了基于 web 的管理工具。

django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "app01"
]
settings.py中

django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。

启动admin管理工具

  要启动admin管理工具,只需要在urls.py中启用admin对应的路由配置项即可。通常我们在使用PyCharm生成项目时会在 urls.py 中自动设置好。

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),

]

1、创建超级用户

python manage.py createsuperuser

2、想要在admin 界面管理某个数据模型(model),我们需要先将该数据模型(model)注册到 admin。admin.py

from django.contrib import admin
from app import models

# Register your models here.

admin.site.register(models.UserInfo)

3、admin界面设置为中文,需要在setting配置文件中修改

LANGUAGE_CODE = 'zh-hans'

4、admin登录:用超级用户登录

http://127.0.0.1:8000/admin

5、登录成功进入后台首页

 6、在models中用元信息设置别名,例:

    class Meta:
        verbose_name = '评论表'
        verbose_name_plural = verbose_name

7、字段属性blank=True时,该字段在django admin里面可以不填,例:

parent_comment = models.ForeignKey("self", null=True, blank=True)

 更多功能:点击参考

 

admin定制:

  这种方式的注册比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作,如:

# 注册方式一
class UserInfoAdmin(admin.ModelAdmin):
    list_display = ['username', 'blog']

admin.site.register(models.UserInfo, UserInfoAdmin)



# 注册方式二
@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):
    list_display = ['username', 'blog']

  ModelAdmin支持的定制项:

    list_display:列表时,定制这张表显示哪些列,多对多关系字段无法放入,可以放自定义的函数

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):
    list_display = ['username', 'blog']

显示效果:

  

还可以定义一个函数,给表添加一列:

from django.utils.safestring import mark_safe

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):

    def delete_obj(self):
        return mark_safe('<a href="#">删除</a>')

    list_display = ['username', 'blog', delete_obj]

显示效果:

  

 

  list_display_links:列表时,哪个字段可以点击跳转 

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):
    list_display = ['username', 'blog']
    list_display_links = ['blog']

效果图:

   

 

 

   list_filter:列表时,定制右侧快速筛选。例如价格相同,出版社相同等等

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):

    def deletes(self):
        return mark_safe('<a href="#">删除</a>')

    list_display = ['username', 'blog', deletes]
    list_display_links = ['blog']
    list_filter = ['username']

效果图:

  

 

  list_editable:列表时,可以直接编辑的列,与list_display_links有冲突

from django.utils.safestring import mark_safe

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):

    def deletes(self):
        return mark_safe('<a href="#">删除</a>')

    list_display = ['username', 'blog', deletes]
    list_display_links = ['blog']
    list_filter = ['username']
    list_editable = ['username']

效果图:

  

 

 

   search_fields:列表时,模糊搜索的功能。可以给多个字段,或的关系

search_fields = ['username']

效果图:

  

  date_hierarchy:列表时,对Date和DateTime类型进行搜索

@admin.register(models.UserInfo)
class UserInfoAdmin(admin.ModelAdmin):

    def deletes(self):
        return mark_safe('<a href="#">删除</a>')

    list_display = ['username', 'blog', 'create_time', deletes]
    list_display_links = ['blog']   # 可以点击的链接
    list_filter = ['username']      # 过滤
    list_editable = ['username']    # 可以编辑的列
    search_fields = ['username']    # 模糊搜索
    date_hierarchy = 'create_time'  # 对日期搜索

  效果图:  

  

  

  action:列表时,定制action中的操作

 # 定制Action行为具体方法
    def func(self, request, queryset):
        # 选中后需要实现的功能,修改或者删除等
        print(self, request, queryset)
        print(request.POST.getlist('_selected_action'))

    func.short_description = "中文显示自定义Actions"
    actions = [func, ]

    # Action选项都是在页面上方显示
    actions_on_top = True
    # Action选项都是在页面下方显示
    actions_on_bottom = False

    # 是否显示选择个数
    actions_selection_counter = True

效果图:

  

  

  fields:详细页面时(编辑页面),显示字段的字段,即需要编辑的字段,用于隐藏有默认值的字段或者可以为空的字段

fields = ['username']

效果图:

  

 更多参数参考:点击

效果对照: 

  

 

posted @ 2020-02-06 14:35  aikell  阅读(411)  评论(0编辑  收藏  举报