美文网首页
Django笔记12-完善 Admin 管理

Django笔记12-完善 Admin 管理

作者: fbckf | 来源:发表于2018-07-25 17:03 被阅读0次

    完善 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)
    ...
    
    image

    列表页面显示字段

     在列表页面时,显示更多的字段可以了解到更多的信息

    # 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

    搜索

     当数据过多时,要查找指定文章就显得很麻烦,所以可以添加一个搜索表单帮助查找

    # 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

    过滤器

     字段筛选出相应的文章

    # 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')
    ...
    
    image

    非超级用户权限

     因为这是个人博客,一般情况下只有一个超级用户,但是假如,另外还有一个非超级用户在使用这个网站,则需要有对应的权限设置。

    • 创建一个非超级用户,设置可登陆,添加权限


      image
    • 假如不修改,默认时和超级用户一样可以对所有的文章进行操作,所以要限制非超级用户只能对自己的文章进行增删改,并且只能增加类而不能删除修改。

    # 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

    评论

    # 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)
    

    总结

     后台功能很多,官方文档中有详细介绍。

    相关文章

      网友评论

          本文标题:Django笔记12-完善 Admin 管理

          本文链接:https://www.haomeiwen.com/subject/hafmmftx.html