这一节来讲讲怎么复用 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
其余的除了用户管理外,都可以按照此种方式进行