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 makemigrations
和 python 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.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中提供了大量的可定制功能,如
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)
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)