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
原文地址:https://www.cnblogs.com/believepd/p/9962585.html