Django搭建个人博客----admin后台简答使用

Django的后台的简答使用

Django后台的管理功能十分强大,这里对初学者进行一些简单的教学

上一篇我们讲到,在admin.py进行注册后,可以在后台看到文章和用户,我们点进去文章之后,在右侧有一个增加文章按钮

点击后出现以下的表单:

在表单上填写数据,然后点击保存,新的一篇博客就完成了,简单吧。

不过我们发现好像在后台并不能看到我们新增加的文章内容。

打开Pycharm编辑器,进入到article/admin.py中:

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ['art_title', 'author', 'created_time', 'updated_time']

新增list_display,然后刷新后台,我们就可以看到在后台可以看到数据了。

 不难看出,list_display中的字段都是model里面的数据一样。

在初学的过程中,我们可以暂定list_display中的数据就是model里的字段。可以写部分,可以写全部,根据个人。

bloguser里也可以使用同样的操作进行字段展示。

我们将用户的数据展示后,会发现已经存在一个用户,就是我们增加的一下用户,我们可以完善一下信息,后面会用得到。

admin后台常用的一些操作

一下代码都是写在admin.py中,切都在管理类里。

  1. 修改外键字段的名称

我们可以看到文章作者显示的是author,作者是admin。我们并不能一眼看出作者是谁,那么这个时候就需要修改了。

article/admin.py中: #ArticleAdmin类中添加

    def art_author(self, obj):
        return obj.author.author_name

    art_author.short_description = '作者'

刷新就可以看到用户名字了

  1. 每页显示的数据个数

list_per_page = 10

这里设置10个

  1. 在文章管理中增加查找功能

   # 查找功能
    # 依据文章标题,作者姓名
    #author__author_name表示外键author的author_name值
    search_fields = (u"art_title", "author__author_name")

    def get_queryset(self, request):
        return super(ArticleAdmin, self).get_queryset(request).all().order_by("-id")

    def get_search_results(self, request, queryset, search_term):
        queryset, use_distinct = super(ArticleAdmin, self).get_search_results(request, queryset, search_term)
        try:
            search_term_as_int = int(search_term)
            queryset &= (self.model.objects.filter(gift_rule_id=search_term_as_int) |
                         self.model.objects.filter(user_id=search_term_as_int) |
                         self.model.objects.filter(activity_id=search_term))
        except:
            pass
        return queryset, use_distinct
  1. 管理页面过滤器

    # 过滤器    
    list_filter = ('created_time',)  # 指定列表过滤器,右边将会出现一个快捷的日期过滤选项,
  1. 顶部时间过滤器

    # 顶部时间过滤器    
    date_hierarchy = ('created_time')
  1. 改变多对多的样式

    # 修改多对多的显示格式    
    filter_horizontal = ('author',)

当作者可以为多个的时候,方便选择作者

  1. 可编辑字段

    '''设置可编辑字段'''    
    list_editable = ('is_active',)

该属性必须是可编辑的

  1. 增加action方法

  # 增加Action行为具体方法
    def defunc(self, request, queryset):
        queryset.update(is_active='0')

    def addfunc(self, request, queryset):
        queryset.update(is_active='1')

    addfunc.short_description = "解除禁用"
    defunc.short_description = "禁用账户"
    actions = [defunc, addfunc]
  1. 多对多显示

   # 修改多对多的显示格式
    def all_tag(self, obj):
        tag_list = []
        for tag in obj.tag.all():
            tag_list.append(tag.name)
        return '、'.join(tag_list)

    all_tag.short_description = '标签'

暂时还没有用到,和1的外键显示类似

  1. 重写AbstractUser对象

网上的重写方法大部分都是错误的,当时我重写的时候长的教训,某些cs博客,还有什么园,都是互抄,不想说什么。

@admin.register(UserProfile)
class AuthorAdmin(UserAdmin):
    '''' #其他
    fieldsets = (
        (None, {u'fields': ('username', 'password')}),
        (gettext_lazy('用户信息'),
         {'fields': ('author_name', 'email')}),
        (gettext_lazy('权限信息'),
         {'fields': ('is_active', 'is_staff', 'is_superuser',
                     'groups', 'user_permissions')}),
    )
    add_fieldsets = (
        (None, {u'fields': ('username', 'password1', 'password2')}),
        (gettext_lazy('用户信息'),
         {'fields': ('author_name', 'email')}),
        (gettext_lazy('权限信息'),
         {'fields': ('is_active', 'is_staff', 'is_superuser',
                     'groups', 'user_permissions')}),
    )

部分功能用不到可以删掉,比如权限,根据自己项目所需

  1. 重写save_model

   def save_model(self, request, obj, form, change):
        obj.user = request.user
        return super().save_model(request, obj, form, change)

用途:网站拥有多个管理员时,可以查看到数据是谁处理。比如修改文章时,左后一次修改人为当前操作用户

部分效果图如下: 




上一篇: Django搭建个人博客----Views初学
下一篇: Django搭建个人博客----Template:展现层