Django 提供了基於 web 的管理工具。python
Django 自動管理工具是 django.contrib 的一部分。你能夠在項目的 settings.py 中的 INSTALLED_APPS 看到它:web
settings.py中django
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', "app01" ]
要啓動admin管理工具,只須要在urls.py中啓用admin對應的路由配置項便可。瀏覽器
一般咱們在使用PyCharm生成項目時會在 urls.py 中自動設置好。session
from django.contrib import admin from django.urls import path,re_path urlpatterns = [ path('admin/', admin.site.urls), ]
首先先啓動咱們的Django項目,而後在瀏覽器中訪問 http://127.0.0.1:8000/admin/,就能看到登錄界面。(具體網址和端口根據本身環境輸入)app
使用 python manage.py createsuperuser 來建立管理員帳號,來登陸admin管理後臺。ide
想要在admin 界面管理某個數據模型(model),咱們須要先將該數據模型(model)註冊到 admin。工具
admin.register(models.Publisher)
admin.register(models.Book)
admin.register(models.Author)
在admin.py中只要按照上面的方式將某個模型類(model class)註冊,便可在Admin中實現該model對應的數據表增刪改查的功能。url
這種方式的註冊比較簡單,若是想要進行更多的定製操做,須要利用ModelAdmin進行操做,如:spa
# 註冊方式1 class PublisherAdmin(admin.ModelAdmin): list_display = ("name", "address") admin.site.register(models.Publisher, PublisherAdmin)
# 註冊方式2 @admin.register(models.Book) class BookAdmin(admin.ModelAdmin): list_display = ("title", "price", "publish_date", "publisher")
ModelAdmin中提供了大量的可定製功能,如
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd', 'xxxxx') def xxxxx(self, obj): #提供自定製返回內容 return "xxxxx"
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd', 'xxxxx') list_display_links = ('pwd',)
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): list_display = ('user', 'pwd','ug',) list_editable = ('ug',)
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): search_fields = ('user', 'pwd')
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): date_hierarchy = 'ctime'
詳細頁面,若是有其餘表和當前表作FK,那麼詳細頁面能夠進行動態增長和刪除
class UserInfoInline(admin.StackedInline): # TabularInline extra = 0 model = models.UserInfo class GroupAdminMode(admin.ModelAdmin): list_display = ('id', 'title',) inlines = [UserInfoInline, ]
@admin.register(models.UserInfo) 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
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): ordering = ('-id',) 或 def get_ordering(self, request): return ['-id', ]
list_per_page = (5)
########################################## 定製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 ########################################## raw_id_fields,詳細頁面,針對FK和M2M字段變成以Input框形式 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): raw_id_fields = ('FK字段', 'M2M字段',) ########################################## fields,詳細頁面時,顯示字段的字段 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): fields = ('user',) ########################################## exclude,詳細頁面時,排除的字段 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): exclude = ('user',) ########################################## readonly_fields,詳細頁面時,只讀字段 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): readonly_fields = ('user',) ########################################## fieldsets,詳細頁面時,使用fieldsets標籤對數據進行分割顯示 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): fieldsets = ( ('基本數據', { 'fields': ('user', 'pwd', 'ctime',) }), ('其餘', { 'classes': ('collapse', 'wide', 'extrapretty'), # 'collapse','wide', 'extrapretty' 'fields': ('user', 'pwd'), }), ) ########################################## 詳細頁時,M2M顯示時,數據移動選擇(方向:上下和左右) @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): filter_vertical = ("m2m字段",) # 或filter_horizontal = ("m2m字段",) radio_fields,詳細頁面時,使用radio顯示選項(FK默認使用select) radio_fields = {"ug": admin.VERTICAL} # 或admin.HORIZONTAL ########################################## 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 ########################################## 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 = "指定列數據爲空時,默認顯示"
from django.contrib import admin from app01 import models # Register your models here. class BookAdmin(admin.ModelAdmin): list_display = ("id","name","price","pub_data",'publish') # 將內容顯示出來 list_editable = ("name","price") # 可在視圖修改 filter_horizontal = ("author",) # 能夠進行搜索選擇 search_fields = ("id","name","publish__name") # 搜索字段功能 list_per_page = (2) # 分頁 list_filter = ("pub_data","publish") # 過濾功能,注意「publish」 ordering = ("-price","id") date_hierarchy='pub_data' # filter_vertical = ("author",) admin.site.register(models.Book,BookAdmin) class BookInline(admin.StackedInline): # TabularInline extra = 0 model = models.Book class PublishAdmin(admin.ModelAdmin): list_display = ['name','city'] inlines = [BookInline,] admin.site.register(models.Publish,PublishAdmin) admin.site.register(models.Author)