django 内置 admin
生活随笔
收集整理的這篇文章主要介紹了
django 内置 admin
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Django內置的Admin是對于model中對應的數據表進行增刪改查提供的組件使用方式有依賴APPdjango.contrib.authdjango.contrib.contenttypesdjango.contrib.messagesdjango.contrib.sessions模板的context_processorsdjango.contrib.auth.context_processors.authdjango.contrib.messages.context_processors.messages中間件django.contrib.auth.middleware.AuthenticationMiddleware?django.contrib.messages.middleware.MessageMiddleware一、配置路由
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中實現增刪改查的功能如
admin.site.register(models.UserInfo)但是這種方式比較簡單如果想要進行更多的定制操作需要利用ModelAdmin進行操作如
方式一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列表時定制顯示的列。@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):list_display?=?('user',?'pwd',?'xxxxx')def?xxxxx(self,?obj):return?"xxxxx"2.?list_display_links列表時定制列可以點擊跳轉。@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):list_display?=?('user',?'pwd',?'xxxxx')list_display_links?=?('pwd',)3.?list_filter列表時定制右側快速篩選。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_related5.?分頁相關
#?分頁每頁顯示條數list_per_page?=?100#?分頁顯示全部真實數據<該值時才會有顯示全部list_max_show_all?=?200#?分頁插件paginator?=?Paginator6.?list_editable列表時可以編輯的列@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):list_display?=?('user',?'pwd','ug',)list_editable?=?('ug',)7.?search_fields列表時模糊搜索的功能
@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):search_fields?=?('user',?'pwd')8.?date_hierarchy列表時對Date和DateTime類型進行搜索
@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點擊保存并繼續編輯save_as_continue?=?True#?如果?save_as=Truesave_as_continue?=?True?點擊Sava?as?new?按鈕后繼續編輯。
#?如果?save_as=Truesave_as_continue?=?False點擊Sava?as?new?按鈕后返回列表。New?in?Django?1.10.12.?save_on_top?=?False詳細頁面在頁面上方是否也顯示保存刪除等按鈕13.?inlines詳細頁面如果有其他表和當前表做FK那么詳細頁面可以進行動態增加和刪除class?UserInfoInline(admin.StackedInline):?#?TabularInlineextra?=?0model?=?models.UserInfoclass?GroupAdminMode(admin.ModelAdmin):list_display?=?('id',?'title',)inlines?=?[UserInfoInline,?]14.?action列表時定制action中的操作
@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?=?True15.?定制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?=?None16.?raw_id_fields詳細頁面針對FK和M2M字段變成以Input框形式@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):raw_id_fields?=?('FK字段',?'M2M字段',)17.?fields詳細頁面時顯示字段的字段
@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):fields?=?('user',)18.?exclude詳細頁面時排除的字段@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):exclude?=?('user',)19.readonly_fields詳細頁面時只讀字段@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):readonly_fields?=?('user',)20.?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'),}),)21.?詳細頁面時M2M顯示時數據移動選擇方向上下和左右
@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):filter_vertical?=?("m2m字段",)?#?或filter_horizontal?=?("m2m字段",)22.?ordering列表時數據排序規則@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):ordering?=?('-id',)或def?get_ordering(self,?request):return?['-id',?]23.?view_on_site編輯時是否在頁面上顯示view?on?setview_on_site?=?False
或
def?view_on_site(self,?obj):return?'24.?radio_fields詳細頁面時使用radio顯示選項FK默認使用selectradio_fields?=?{"ug":?admin.VERTICAL}?#?或admin.HORIZONTAL?25.?show_full_result_count?=?True列表時模糊搜索后面顯示的數據個數樣式@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?=?{}詳細頁面時指定現實插件from?django.forms?import?widgets
from?django.utils.html?import?format_htmlclass?MyTextarea(widgets.Widget):def?__init__(self,?attrs=None):#?Use?slightly?better?defaults?than?HTML's?20x2?boxdefault_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?=?{}添加頁面當在某字段填入值后自動會將值填充到指定字段。@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):prepopulated_fields?=?{"email":?("user","pwd",)}
PS:?DjangoAdmin中使用js實現功能頁面email字段的值會在輸入user、pwd時自動填充28.?form?=?ModelForm用于定制用戶請求時候表單驗證
from?app01?import?models
from?django.forms?import?ModelForm
from?django.forms?import?fieldsclass?MyForm(ModelForm):others?=?fields.CharField()class?Meta:model?=?models?=?models.UserInfofields?=?"__all__"@admin.register(models.UserInfo)
class?UserAdmin(admin.ModelAdmin):form?=?MyForm29.?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.userup.empty_value_display?=?"指定列數據為空時默認顯示"
轉載于:https://blog.51cto.com/haoyonghui/1983444
總結
以上是生活随笔為你收集整理的django 内置 admin的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java零散知识点
- 下一篇: 如何区分Android wrap_con