完善 admin 管理
增加后台管理的功能
后台定制
后台管理提供很多功能,只需要在 admin.py
模块中添加代码就行了
编辑页面显示字段
并不是所有的字段都需要显示,比如 article 的 likes
字段,或者 category 的 article_count
字段,这些都是不同手动修改的。那就不用在编辑页面显示。
# blog/admin.py
from django.contrib import admin
from .models import Category, Article
# Register your models here.
class ArticleAdmin(admin.ModelAdmin):
# fields 添加要显示的字段名称
fields = ('title', 'author', 'category', 'body', 'abstract')
class CategoryAdmin(admin.ModelAdmin):
fields = ('name', 'instructions')
admin.site.register(Category, CategoryAdmin)
admin.site.register(Article, ArticleAdmin)
...
列表页面显示字段
在列表页面时,显示更多的字段可以了解到更多的信息
# blog/admin.py
...
class ArticleAdmin(admin.ModelAdmin):
# list_display 字段中添加要显示的字段名称
list_display = ('title', 'author', 'category', 'likes', 'create_time')
fields = ('title', 'author', 'category', 'body', 'abstract')
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'instructions')
fields = ('name', 'instructions')
...
搜索
当数据过多时,要查找指定文章就显得很麻烦,所以可以添加一个搜索表单帮助查找
# blog/admin.py
...
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category', 'likes', 'create_time')
# 在 search_fields 中添加字段名称,作为搜索字段
search_fields = ('title',)
fields = ('title', 'author', 'category', 'body', 'abstract')
class CategoryAdmin(admin.ModelAdmin):
list_display = ('name', 'instructions')
search_fields = ('name',)
fields = ('name', 'instructions')
...
过滤器
字段筛选出相应的文章
# blog/admin.py
...
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category', 'likes', 'create_time')
search_fields = ('title',)
# 根据 类别筛选文章
list_filter = ('category',)
fields = ('title', 'author', 'category', 'body', 'abstract')
...
非超级用户权限
因为这是个人博客,一般情况下只有一个超级用户,但是假如,另外还有一个非超级用户在使用这个网站,则需要有对应的权限设置。
-
创建一个非超级用户,设置可登陆,添加权限
假如不修改,默认时和超级用户一样可以对所有的文章进行操作,所以要限制非超级用户只能对自己的文章进行增删改,并且只能增加类而不能删除修改。
# blog/admin.py
...
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category', 'likes', 'create_time')
search_fields = ('title',)
list_filter = ('category',)
fields = ('title', 'author', 'category', 'body', 'abstract')
def get_queryset(self, request):
article_list = super(ArticleAdmin, self).get_queryset(request)
if request.user.is_superuser:
return article_list
else:
return article_list.filter(author=request.user)
...
评论
# comment/admin.py
from django.contrib import admin
from .models import Comment
# Register your models here.
class CommentAdmin(admin.ModelAdmin):
fields = ('user', 'article', 'body')
list_filter = ('article',)
list_display = ('user', 'article')
def get_queryset(self, request):
comment = super(CommentAdmin, self).get_queryset(request)
if request.user.is_superuser:
return comment
else:
return comment.filter(user=request.user)
admin.site.register(Comment, CommentAdmin)
总结
后台功能很多,官方文档中有详细介绍。