Django admin管理工具
一、admin app
Django 提供了基于 web 的管理工具。
Django 自动管理工具是 django.contrib 的一部分,可以在项目的 settings.py 中的 INSTALLED_APPS 看到它:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
django.contrib是一套庞大的功能集,它是Django基本代码的组成部分。
二、激活管理工具
通常我们在生成项目时会在 urls.py 中自动设置好
from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ]
三、使用admin管理工具
首先先启动我们的Django项目,然后在浏览器中访问 http://127.0.0.1:8000/admin/,就能看到登陆界面。(具体网址和端口根据自己环境输入)
使用 python manage.py createsuperuser 来创建管理员账号,来登录admin管理后台。
想要在admin 界面管理某个数据模型(model),需要先将该数据模型(model)注册到 admin。
四、admin的定制
只要按照下面的方式将某个模型类注册,即可在Admin中实现增删改查的功能:
# admin.py from django.contrib import admin from 应用名 import models admin.site.register(models.Publisher) admin.site.register(models.Book) admin.site.register(models.Author)
但是,这种方式比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作,如:
# 方式一 class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher") admin.site.register(models.Book, BookAdmin) # 方式二 @admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher")
ModelAdmin支持的定制功能
ModelAdmin中提供了大量的可定制功能,如:
1. list_display,列表时,定制显示的列。
from django.utils.safestring import mark_safe @admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher", "delete") def delete(self, obj): return mark_safe("<a href='#'>删除</a>")
2. list_display_links,列表时,定制列可以点击跳转。
@admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher") list_display_links = ("price",)
3. list_filter,列表时,定制右侧快速筛选。
@admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher") list_filter = ("title", "price", "publisher")
4. list_select_related,列表时,连表查询是否自动 select_related。
5. list_editable,列表时,可以编辑的列 。
@admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher") list_editable = ("price",)
6. search_fields,列表时,模糊搜索的功能。
@admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher") search_fields = ("title", "publisher")
7. date_hierarchy,列表时,对Date和DateTime类型进行搜索。
@admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher", "publishDate") date_hierarchy = "publishDate"
8. inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除。
9. action,列表时,定制action中的操作。
@admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publisher", "publishDate") # 定制Action行为具体方法 def func(self, request, queryset): print(self, request, queryset) queryset.update(price=100) func.short_description = "初始化价格" actions = [func,] # Action选项都是在页面上方显示 actions_on_top = True # Action选项都是在页面下方显示 actions_on_bottom = False # 是否显示选择个数 actions_selection_counter = True
分隔
10. 定制HTML模板。
add_form_template = None change_form_template = None change_list_template = None delete_confirmation_template = None delete_selected_confirmation_template = None object_history_template = None