banner
raye~

Raye's Journey

且趁闲身未老,尽放我、些子疏狂。
medium
tg_channel
twitter
github
email
nintendo switch
playstation
steam_profiles

【Django後台開發三】後台管理實現

【Django 後臺開發一】環境部署和初始化項目

【Django 後臺開發二】模型設計與創建

這一節來講講怎麼復用 Django 後臺系統,來實現用戶的管理

首先還是要將後臺系統改為中文,同時名字也要修改為我們自己的(假裝是自己開發的)

./easy_talk_backend/study/admin.py 中修改

admin.site.site_header = 'xxx後臺系統'

同時在項目的 ./easy_talk_backend/settings.py 中修改語言為中文

LANGUAGE_CODE = 'zh-Hans'

然後我們來實現學習內容的管理,在 admin.py 中導入我們上一節創建的 model

from .models import StudyContent, PushStrategy, SchoolClass, Student, Checkin

註冊到後臺

@admin.register(StudyContent)
class StudyContentAdmin(admin.ModelAdmin):
    pass

此時後臺就可以管理這個 StudyContent,但是太過簡陋了,我們需要自定義下

決定要展示的屬性 : list_display
支持搜索的屬性: search_fields
過濾字段: list_filter
禁用原來的刪除,增加新的上線操作: actions

前三個還挺簡單的,代碼如下:

@admin.register(StudyContent)
class StudyContentAdmin(admin.ModelAdmin):
    list_display = ('title', 'brief', 'url', 'is_online')
    search_fields = ('title', 'url')
    actions = ['mark_as_online']
    list_filter = ('is_online',)
    pass

mark_as_online 是我們自定義的操作,也就是說這個操作需要更新 is_online 的屬性

    def mark_as_online(self, request, queryset):
        queryset.update(is_online=True)
        self.message_user(request, '所選學習內容已成功標記為上線')
    mark_as_online.short_description = '標記所選學習內容為上線'

禁用刪除操作

    def get_actions(self, request):
        actions = super().get_actions(request)
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

最後就實現好了~,代碼如下:

@admin.register(StudyContent)
class StudyContentAdmin(admin.ModelAdmin):
    list_display = ('title', 'brief', 'url', 'is_online')
    search_fields = ('title', 'url')
    actions = ['mark_as_online']
    list_filter = ('is_online',)

    def mark_as_online(self, request, queryset):
        queryset.update(is_online=True)
        self.message_user(request, '所選學習內容已成功標記為上線')
    mark_as_online.short_description = '標記所選學習內容為上線'

    def get_queryset(self, request):
        return super().get_queryset(request)

    def get_actions(self, request):
        actions = super().get_actions(request)
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

其餘的除了用戶管理外,都可以按照此種方式進行

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。