〖Python〗-- Django内置Admin
【Django內置Admin】
Django內置的Admin是對于model中對應的數據表進行增刪改查提供的組件,使用方式有:
依賴APP:django.contrib.authdjango.contrib.contenttypesdjango.contrib.messagesdjango.contrib.sessions模板的context_processors:django.contrib.auth.context_processors.authdjango.contrib.messages.context_processors.messages中間件:django.contrib.auth.middleware.AuthenticationMiddleware django.contrib.messages.middleware.MessageMiddleware Django Admin內部依賴一. 配置路由
| 1 2 3 | urlpatterns?=?[ ????????url(r'^admin/', admin.site.urls), ????] |
當前配置的路由可以創建一些路由映射關系:
/admin/
/admin/login/
/admin/logout/
/admin/password_change/
/admin/password_change/done/
/admin/app名稱/model名稱/
/admin/app名稱/model名稱/add/
/admin/app名稱/model名稱/ID值/history/
/admin/app名稱/model名稱/ID值/change/
/admin/app名稱/model名稱/ID值/delete/
二. 定制Admin
在admin.py中只需要講Mode中的某個類注冊,即可在Admin中實現增刪改查的功能,如:
| 1 | admin.site.register(models.UserInfo) |
但是,這種方式比較簡單,如果想要進行更多的定制操作,需要利用ModelAdmin進行操作,如:
| 1 2 3 4 5 6 7 8 9 10 11 | 方式一: ????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,列表時,定制顯示的列。
| 1 2 3 4 5 6 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????list_display?=?('user',?'pwd',?'xxxxx') ????def?xxxxx(self, obj): ????????return?"xxxxx" |
2.?list_display_links,列表時,定制列可以點擊跳轉。
| 1 2 3 4 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????list_display?=?('user',?'pwd',?'xxxxx') ????list_display_links?=?('pwd',) |
3.?list_filter,列表時,定制右側快速篩選。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | from?django.utils.translation?import?ugettext_lazy as _ @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????list_display?=?('user',?'pwd') ????class?Ugg(admin.SimpleListFilter): ????????title?=?_('decade born') ????????parameter_name?=?'xxxxxx' ????????def?lookups(self, request, model_admin): ????????????""" ????????????顯示篩選選項 ????????????:param request: ????????????:param model_admin: ????????????:return: ????????????""" ????????????return?models.UserGroup.objects.values_list('id',?'title') ????????def?queryset(self, request, queryset): ????????????""" ????????????點擊查詢時,進行篩選 ????????????:param request: ????????????:param queryset: ????????????:return: ????????????""" ????????????v?=?self.value() ????????????return?queryset.filter(ug=v) ????list_filter?=?('user',Ugg,) |
4.?list_select_related,列表時,連表查詢是否自動select_related
5. 分頁相關
| 1 2 3 4 5 6 7 8 | # 分頁,每頁顯示條數 ????list_per_page?=?100 # 分頁,顯示全部(真實數據<該值時,才會有顯示全部) ????list_max_show_all?=?200 # 分頁插件 ????paginator?=?Paginator |
6. list_editable,列表時,可以編輯的列
| 1 2 3 4 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????list_display?=?('user',?'pwd','ug',) ????list_editable?=?('ug',) |
7.?search_fields,列表時,模糊搜索的功能
| 1 2 3 4 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????? ????search_fields?=?('user',?'pwd') |
8.?date_hierarchy,列表時,對Date和DateTime類型進行搜索
| 1 2 3 4 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????date_hierarchy?=?'ctime' |
9.?preserve_filters,詳細頁面,刪除、修改,更新后跳轉回列表后,是否保留原搜索條件
10.?save_as = False,詳細頁面,按鈕為“Sava as new” 或 “Sava and add another”
11.?save_as_continue = True,點擊保存并繼續編輯
| 1 2 3 4 5 6 | save_as_continue?=?True # 如果 save_as=True,save_as_continue = True, 點擊Sava as new 按鈕后繼續編輯。 # 如果 save_as=True,save_as_continue = False,點擊Sava as new 按鈕后返回列表。 New?in?Django?1.10. |
12.?save_on_top = False,詳細頁面,在頁面上方是否也顯示保存刪除等按鈕
13.?inlines,詳細頁面,如果有其他表和當前表做FK,那么詳細頁面可以進行動態增加和刪除
| 1 2 3 4 5 6 7 8 | class?UserInfoInline(admin.StackedInline):?# TabularInline ????extra?=?0 ????model?=?models.UserInfo class?GroupAdminMode(admin.ModelAdmin): ????list_display?=?('id',?'title',) ????inlines?=?[UserInfoInline, ] |
14. action,列表時,定制action中的操作
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @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 |
15. 定制HTML模板
| 1 2 3 4 5 6 | 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 |
16.?raw_id_fields,詳細頁面,針對FK和M2M字段變成以Input框形式
| 1 2 3 4 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????raw_id_fields?=?('FK字段',?'M2M字段',) |
17.?fields,詳細頁面時,顯示字段的字段
| 1 2 3 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????fields?=?('user',) |
18.?exclude,詳細頁面時,排除的字段
| 1 2 3 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????exclude?=?('user',) |
19.?readonly_fields,詳細頁面時,只讀字段
| 1 2 3 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????readonly_fields?=?('user',) |
20.?fieldsets,詳細頁面時,使用fieldsets標簽對數據進行分割顯示
| 1 2 3 4 5 6 7 8 9 10 11 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????fieldsets?=?( ????????('基本數據', { ????????????'fields': ('user',?'pwd',?'ctime',) ????????}), ????????('其他', { ????????????'classes': ('collapse',?'wide',?'extrapretty'),??# 'collapse','wide', 'extrapretty' ????????????'fields': ('user',?'pwd'), ????????}), ????) |
21. 詳細頁面時,M2M顯示時,數據移動選擇(方向:上下和左右)
| 1 2 3 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????filter_vertical?=?("m2m字段",)?# 或filter_horizontal = ("m2m字段",) |
22.?ordering,列表時,數據排序規則
| 1 2 3 4 5 6 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????ordering?=?('-id',) ????或 ????def?get_ordering(self, request): ????????return?['-id', ] |
23.?view_on_site,編輯時,是否在頁面上顯示view on set
| 1 2 3 4 | view_on_site?=?False 或 def?view_on_site(self, obj): ????return?'https://www.baidu.com' |
24.?radio_fields,詳細頁面時,使用radio顯示選項(FK默認使用select)
| 1 | radio_fields?=?{"ug": admin.VERTICAL}?# 或admin.HORIZONTAL |
25.?show_full_result_count = True,列表時,模糊搜索后面顯示的數據個數樣式
| 1 2 3 4 5 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????# show_full_result_count = True # 1 result (12 total) ????# show_full_result_count = False? # 1 result (Show all) ????search_fields?=?('user',) |
26. formfield_overrides = {},詳細頁面時,指定現實插件
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | from?django.forms?import?widgets from?django.utils.html?import?format_html class?MyTextarea(widgets.Widget): ????def?__init__(self, attrs=None): ????????# Use slightly better defaults than HTML's 20x2 box ????????default_attrs?=?{'cols':?'40',?'rows':?'10'} ????????if?attrs: ????????????default_attrs.update(attrs) ????????super(MyTextarea,?self).__init__(default_attrs) ????def?render(self, name, value, attrs=None): ????????if?value?is?None: ????????????value?=?'' ????????final_attrs?=?self.build_attrs(attrs, name=name) ????????return?format_html('<textarea {}>\r\n{}</textarea>',final_attrs, value) @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????formfield_overrides?=?{ ????????models.models.CharField: {'widget': MyTextarea}, ????} |
27.?prepopulated_fields = {},添加頁面,當在某字段填入值后,自動會將值填充到指定字段。
| 1 2 3 4 | @admin.register(models.UserInfo) class?UserAdmin(admin.ModelAdmin): ????prepopulated_fields?=?{"email": ("user","pwd",)} |
PS: DjangoAdmin中使用js實現功能,頁面email字段的值會在輸入:user、pwd時自動填充
28. form = ModelForm,用于定制用戶請求時候表單驗證
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
29. empty_value_display = "列數據為空時,顯示默認值"
| 1 2 3 4 5 6 7 8 9 | @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?=?"指定列數據為空時,默認顯示" |
轉載于:https://www.cnblogs.com/SHENGXIN/p/8094371.html
總結
以上是生活随笔為你收集整理的〖Python〗-- Django内置Admin的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端之路(一)之W3C是什么?
- 下一篇: [ 人机交互 ] 第三次作业 20150