Dajngo-admin组件管理

admin组件的使用

Dajngo为了方便用户管理,提供了基于web的管理工具。

如果要使用Dajngo-admin的组件需要现在settings.py中注册

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'rbac.apps.RbacConfig',
]

激活管理工具

创建项目时在urls.py中会自动穿件

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

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

使用管理工具

先用 python manage.py startapp app01 创建一个app,然后在models.py中创建相应的类进行数据库迁移使用python manage.py makemigrationspython manage.py migrate
启动开发服务器,然后在浏览器中访问 http://127.0.0.1:8000/admin/,得到登陆界面,你可以通过命令 python manage.py createsuperuser 来创建超级用户。

为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin

from django.contrib import admin
from .models import *
admin.site.register(UserInfo)
admin.site.register(Role)
admin.site.register(Menu)
admin.site.register(Permission)
admin.site.register(PermissionGroup)

admin的定制

如果要在admin中操作一个一张表的增删改查那么需要在admin.py中注册

from models import *
admin.site.register(UesrInfo)

但是这样注册在admin-web页面中只会显示你定义models.py类中

def __str__(self):
    return self.字段

这个字段名称。如果不定义这个方法,那么则只会显示object对象。
这里写图片描述
但是这么单纯的注册显示非常单调,可以直接看到的信息量非常少,所以这时候我们可以采用定制。用法如下

方式一:
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd',)

    admin.site.register(models.UserInfo, UserAdmin) # 第一个参数可以是列表


方式二:
    @admin.register(models.UserInfo)                # 第一个参数可以是列表
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd',)

ModelAdmin中提供了大量的可定制功能,如

  1. list_display,列表时,定制显示的列。
class PermissionConfig(admin.ModelAdmin):
    # ordering = ['id']
    list_display = ['id', 'title', 'url', 'code', 'permission_group', 'parent']
    pass

admin.site.register(Permission, PermissionConfig)

这里写图片描述

2 list_display_links,列表时,定制列可以点击跳转。

class PermissionConfig(admin.ModelAdmin):
    # ordering = ['id']
    list_display = ['id', 'title', 'url', 'code', 'permission_group', 'parent']
    list_display_links = ['title']

admin.site.register(Permission, PermissionConfig)

这里写图片描述
3 list_filter,列表时,定制右侧快速筛选。

class PermissionConfig(admin.ModelAdmin):
    # ordering = ['id']
    list_display = ['id', 'title', 'url', 'code', 'permission_group', 'parent']
    list_display_links = ['title']
    list_filter = ['permission_group']   # 一般关联ForeginKey或者ManyToMany

admin.site.register(Permission, PermissionConfig)

这里写图片描述

4.list_select_related,列表时,连表查询是否自动select_related

5.list_editable,列表时,可以编辑的列

6.search_fields,列表时,模糊搜索的功能

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

8.inlines,详细页面,如果有其他表和当前表做FK,那么详细页面可以进行动态增加和删除

class UserInfoInline(admin.StackedInline): # TabularInline
    extra = 0
    model = models.UserInfo


class GroupAdminMode(admin.ModelAdmin):
    list_display = ('id', 'title',)
    inlines = [UserInfoInline, ]

9.定制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

10.raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式

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

    raw_id_fields = ('FK字段', 'M2M字段',)

11.fields,详细页面时,编辑或添加时显示字段的字段,只显示这个字段

12.exclude,详细页面时,排除的字段(上面取反)

13.readonly_fields,详细页面时,只读字段(改字段无法修改)

14.fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示

15.详细页面时,M2M显示时,数据移动选择(方向:上下和左右)

16.ordering,列表时,数据排序规则

17.radio_fields,详细页面时,使用radio显示选项(FK默认使用select)

18.form = ModelForm,用于定制用户请求时候表单验证

from app01 import models
from django.forms import ModelForm
from django.forms import fields


class MyForm(ModelForm):
    others = fields.CharField()

    class Meta:
        model = models = models.UserInfo
        fields = "__all__"

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

    form = MyForm

19.empty_value_display = “列数据为空时,显示默认值”

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    empty_value_display = "列数据为空时,默认显示"

    list_display = ('user','pwd','up')

    def up(self,obj):
        return obj.user
    up.empty_value_display = "指定列数据为空时,默认显示"

20.action,列表时,定制action中的操作!!!!!!
定制批量操作

class UserInfoConfig(admin.ModelAdmin):
    list_display = ["id", "name", "email"]
    def foo(self, request, queryset):
            print(queryset)
            queryset.update(email="[email protected]")

        foo.short_description = "中文显示自定义Actions"
        actions = [foo,]
    admin.site.register(UserInfo,UserInfoConfig)

你可能感兴趣的:(DJANGO)