Django 提供了基於 web 的管理工具。python
Django 自動管理工具是 django.contrib 的一部分。能夠在項目的 settings.py 中的 INSTALLED_APPS 看到它:web
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', "app01" ]
在生成項目時會在 urls.py 中自動設置好數據庫
from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), ]
註冊數據模型到 admin(在admin.py中)django
admin.site.register(models.UserInfo)
能夠經過命令 python manage.py createsuperuser 來建立超級用戶後,訪問 http://127.0.0.1:8000/admin/,獲得登錄界面,進行數據庫的修改session
定製操做須要利用ModelAdmin進行操做:app
方式一: 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中可定製功能大全:ide
1. list_display,列表時,定製顯示的列工具
def edit(self):
return mark_safe('<a href="">編輯</a>')
list_display = ('user', 'pwd', 'xxxxx',edit)
2. list_display_links,列表時,定製列能夠點擊跳轉。url
list_display_links = ('pwd',)
3. list_filter,列表時,定製右側快速篩選spa
4. list_select_related,列表時,連表查詢是否自動select_related
5. list_editable,列表時,能夠編輯的列
6. search_fields,列表時,模糊搜索的功能
7. date_hierarchy,列表時,對Date和DateTime類型進行搜索
date_hierarchy = 'ctime'
8 inlines,詳細頁面,若是有其餘表和當前表作FK,那麼詳細頁面能夠進行動態增長和刪除
class UserInfoInline(admin.StackedInline): # TabularInline extra = 0 model = models.UserInfo class GroupAdminMode(admin.ModelAdmin): list_display = ('id', 'title',) inlines = [UserInfoInline, ]
9 action,列表時,定製action中的操做
class UserAdmin(admin.ModelAdmin): # 定製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
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
11 raw_id_fields,詳細頁面,針對FK和M2M字段變成以Input框形式
class UserAdmin(admin.ModelAdmin): raw_id_fields = ('FK字段', 'M2M字段',)
12 fields,詳細頁面時,顯示字段的字段
class UserAdmin(admin.ModelAdmin): fields = ('user',)
13 exclude,詳細頁面時,排除的字段
class UserAdmin(admin.ModelAdmin): exclude = ('user',)
14 readonly_fields,詳細頁面時,只讀字段
class UserAdmin(admin.ModelAdmin): readonly_fields = ('user',
15 fieldsets,詳細頁面時,使用fieldsets標籤對數據進行分割顯示
class UserAdmin(admin.ModelAdmin): fieldsets = ( ('基本數據', { 'fields': ('user', 'pwd', 'ctime',) }), ('其餘', { 'classes': ('collapse', 'wide', 'extrapretty'), # 'collapse','wide', 'extrapretty' 'fields': ('user', 'pwd'), }), )
16 詳細頁面時,M2M顯示時,數據移動選擇(方向:上下和左右)
class UserAdmin(admin.ModelAdmin): filter_vertical = ("m2m字段",) # 或filter_horizontal = ("m2m字段",)
17 ordering,列表時,數據排序規則
class UserAdmin(admin.ModelAdmin): ordering = ('-id',) 或 def get_ordering(self, request): return ['-id', ]
18. radio_fields,詳細頁面時,使用radio顯示選項(FK默認使用select)
radio_fields = {"ug": admin.VERTICAL} # 或admin.HORIZONTAL
19 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
20 empty_value_display = "列數據爲空時,顯示默認值"
class UserAdmin(admin.ModelAdmin): empty_value_display = "列數據爲空時,默認顯示" list_display = ('user','pwd','up') def up(self,obj): return obj.user up.empty_value_display = "指定列數據爲空時,默認顯示"