完善 admin 管理
增加后臺(tái)管理的功能
后臺(tái)定制
?后臺(tái)管理提供很多功能,只需要在 admin.py 模塊中添加代碼就行了
編輯頁(yè)面顯示字段
?并不是所有的字段都需要顯示,比如 article 的 likes 字段,或者 category 的 article_count 字段,這些都是不同手動(dòng)修改的。那就不用在編輯頁(yè)面顯示。
# 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)
...
image
列表頁(yè)面顯示字段
?在列表頁(yè)面時(shí),顯示更多的字段可以了解到更多的信息
# 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')
...
image
搜索
?當(dāng)數(shù)據(jù)過(guò)多時(shí),要查找指定文章就顯得很麻煩,所以可以添加一個(gè)搜索表單幫助查找
# 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')
...
image
過(guò)濾器
?字段篩選出相應(yīng)的文章
# blog/admin.py
...
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'category', 'likes', 'create_time')
search_fields = ('title',)
# 根據(jù) 類別篩選文章
list_filter = ('category',)
fields = ('title', 'author', 'category', 'body', 'abstract')
...
image
非超級(jí)用戶權(quán)限
?因?yàn)檫@是個(gè)人博客,一般情況下只有一個(gè)超級(jí)用戶,但是假如,另外還有一個(gè)非超級(jí)用戶在使用這個(gè)網(wǎng)站,則需要有對(duì)應(yīng)的權(quán)限設(shè)置。
-
創(chuàng)建一個(gè)非超級(jí)用戶,設(shè)置可登陸,添加權(quán)限
image 假如不修改,默認(rèn)時(shí)和超級(jí)用戶一樣可以對(duì)所有的文章進(jìn)行操作,所以要限制非超級(jí)用戶只能對(duì)自己的文章進(jìn)行增刪改,并且只能增加類而不能刪除修改。
# 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)
...
image
評(píng)論
# 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)
總結(jié)
?后臺(tái)功能很多,官方文檔中有詳細(xì)介紹。