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

其余的除了用户管理外,都可以按照此种方式进行

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。