小編給大家分享一下如何使用django2.0來(lái)開發(fā)ModelAdmin模型管理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括扎蘭屯網(wǎng)站建設(shè)、扎蘭屯網(wǎng)站制作、扎蘭屯網(wǎng)頁(yè)制作以及扎蘭屯網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,扎蘭屯網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到扎蘭屯省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!> cd cms > python manager.py runserver
打開瀏覽器http://127.0.0.1:8000/admin
就可以看到后臺(tái)的登錄窗口
因?yàn)槲覀冞€沒有后臺(tái)的超級(jí)管理員, 先用命令行創(chuàng)建一個(gè)
> cd cms > python manager.py createsuperuser
按照提示輸入U(xiǎn)sername, Password即可, 在瀏覽器中輸入賬號(hào)密碼就可以登錄到后臺(tái)了
登錄成功后發(fā)現(xiàn)沒有我們的Account模塊, 現(xiàn)在我們就來(lái)把Account模塊注冊(cè)到后臺(tái)中
# account/admin.py from django.contrib import admin from .models import Account admin.site.register(Account)
然后再刷新瀏覽器, 就會(huì)發(fā)現(xiàn)出現(xiàn)了Account模塊, 但是顯示的界面全都是英文的
另外還有一種裝飾器的注冊(cè)方式
# account/admin.py from django.contrib import admin from .models import Account @admin.register(Account) class AccountAdmin(admin.ModelAdmin): pass
也會(huì)實(shí)現(xiàn)同樣的效果
django當(dāng)然替我們想到了這一點(diǎn)
# cms/settings.py # 指定語(yǔ)言為中文 LANGUAGE_CODE = 'zh-Hans' # 指定時(shí)區(qū) TIME_ZONE = 'PRC' # 改為False, 存入數(shù)據(jù)庫(kù)的時(shí)間才正常, 否則會(huì)比正常時(shí)間少八個(gè)小時(shí) USE_TZ = False
# account/admin.py from django.contrib import admin from .models import Account @admin.register(Account) class AccountAdmin(admin.ModelAdmin): # 控制列表頁(yè)按鈕顯示位置 actions_on_top = False actions_on_bottom = True # 是否顯示列表頁(yè)數(shù)據(jù)數(shù)量([選中了n個(gè)中的m個(gè)]) actions_selection_counter = True
ModelAdmin是后臺(tái)指定模塊的一個(gè)控制類, 包括后臺(tái)的列表頁(yè)面樣式、數(shù)據(jù)、以及編輯/新增, 操作方法等都由這個(gè)類控制, 當(dāng)繼承這個(gè)類, 我們就可以通過(guò)覆蓋這個(gè)類的方法, 來(lái)完成我們的一些操作
actions
指定自定義的操作列表
如果是定義的function, 則
actions = [函數(shù)名]
如果是class的function, 則
actions = ['類中的方法名']
actions_on_top
指定列表頁(yè)按鈕的是否在上邊, 設(shè)置為True則在上面
actions_on_bottom
同actions_on_top, 只不過(guò)是是否在下方
date_hierarchy
只可作用在DateField和DateTimeField上, 設(shè)置后, 可以根據(jù)時(shí)間段, 去過(guò)濾數(shù)據(jù)
class AccountAdmin(models.ModelAdmin): ...忽略其他代碼 date_hierarchy = 'create_time'
exclude
排除新增/編輯頁(yè)面需要顯示的字段
fields
指定新增、編輯頁(yè)面要顯示的字段
fields = ('account', 'nickname', 'password', 'email', 'phone', 'status')
list_display
控制列表頁(yè)要顯示的字段
list_display = ('account', 'nickname', 'email', 'phone', 'status', 'create_time')
list_display_links
指定哪些在列表頁(yè)顯示的字段上加鏈接
list_display_links = ('account', )
list_editable
指定哪些字段可以直接在列表頁(yè)編輯
list_editable = ('status', )
list_filter
列表頁(yè)過(guò)濾條件
list_filter = ('status', )
ordering
排序, 影響order_by
ordering = ['id]
list_per_page
控制每頁(yè)顯示的數(shù)據(jù)數(shù)量
每個(gè)會(huì)員的狀態(tài)有啟用和禁用兩種, 現(xiàn)在我們想要增加一個(gè)操作來(lái)批量啟用和禁用
先定義一個(gè)操作的方法
class AccountAdmin(models.ModelAdmin): def disable_account(self, request, queryset): queryset.update(status=0) disable_account.short_description='啟用'
disable_account包含兩個(gè)參數(shù)request
是HttpRequest對(duì)象, 包含請(qǐng)求的所有清晰queryset
是數(shù)據(jù)庫(kù)操作的QuerySet對(duì)象, 也就是當(dāng)我們點(diǎn)擊了操作按鈕后, 就會(huì)執(zhí)行queryset.filter(id__in=選中的id).update(status=0), django已經(jīng)提前幫我們寫好了queryset.filter()這部分寫好了。
disable_account.short_description是指定這個(gè)操作在后臺(tái)顯示的名稱
定義好方法后, 需要將操作的方法寫入到actions屬性中才會(huì)生效
class AccountAdmin(models.ModelAdmin): actions = ['disable_ccount'] def disable_account(self, request, queryset): queryset.update(status=0) disable_account.short_description='啟用'
同樣的, 我們可以再定義一個(gè)enable_accoun方法。
然后在列表頁(yè)的動(dòng)作中, 就可以看到我們定義的操作了
這種方法可以用在一般通用方法中, 比如我們的account模型有一個(gè)is_deleted字段, 這個(gè)字段的意思是在數(shù)據(jù)刪除后, 設(shè)置is_deleted為1, 默認(rèn)正常時(shí)是0, 而django默認(rèn)的刪除操作是直接物理刪除數(shù)據(jù), 所以我們需要重寫刪除的方法
# account/admin.py from django.contrib import admin # 禁用默認(rèn)的刪除操作 admin.site.disable_action('delete_selected')
這樣就會(huì)禁用掉默認(rèn)的刪除操作
# 重新定義一個(gè)刪除操作 def deleted_select(self, request, queryset): queryset.update(is_deleted=1)
原理和之前我們?cè)黾硬僮鞣椒ㄒ粯?br/>將這個(gè)操作注冊(cè)到admin站點(diǎn)中
admin.site.add_action(deleted_select, '刪除數(shù)據(jù)')
add_action第一個(gè)參數(shù)是操作的函數(shù)名, 第二個(gè)是顯示的按鈕
在我們修改了刪除操作后, 發(fā)現(xiàn)即使我們刪除了數(shù)據(jù), 列表中還是會(huì)出現(xiàn), 這個(gè)是不符合我們預(yù)期的
所以我們要重寫ModelAdmin的查詢數(shù)據(jù)方法, 過(guò)濾掉is_deleted=1的數(shù)據(jù)
class AccountAdmin(admin.ModelAdmin): ...省略代碼 def get_queryset(self, request): queryset = super().get_queryset(request) return queryset.filter(is_deleted=0)
第一步queryset = super().get_queryset(request)
, 就是獲取到ModelAdmin的查詢對(duì)象QuerySet, 然后增加過(guò)濾條件filter, 然后ModelAdmin會(huì)繼續(xù)操作查詢的方法。
以上是“如何使用django2.0來(lái)開發(fā)ModelAdmin模型管理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
網(wǎng)站名稱:如何使用django2.0來(lái)開發(fā)ModelAdmin模型管理-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://www.rwnh.cn/article46/ceiseg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、虛擬主機(jī)、微信小程序、定制網(wǎng)站、小程序開發(fā)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容