Django企业开发实战-blog项目(3)

github链接 https://github.com/yt-xy/Django-blog

编写Admin管理后台

Category和Tag的Admin管理后台

blogs/admin.py

from django.contrib import admin
from .models import Post, Category, Tag
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'status', 'is_nav', 'created_time')
    fields = ('name', 'status', 'is_nav')
@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
    list_display = ('name', 'status', 'created_time')
    fields = ('name', 'status')

在这里插入图片描述
为使owner这个字段自动设定为当前的登录用户

class CategoryAdmin(admin.ModelAdmin):
	...
    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(CategoryAdmin, self).save_model(request, obj, form, change)
class TagAdmin(admin.ModelAdmin):
	...
    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(TagAdmin, self).save_model(request, obj, form, change)
# request是当前请求,request.user是当前已经登录的用户。如果是未登录的情况下,拿到的就是匿名用户
# obj是当前要保存的对象,form是页面提交表单之后的对象,嫦娥用于标志本次保存的数据是新增还是更新

在这里插入图片描述

Post的Admin管理后台

blogs/admin.py

from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from .models import Post, Category, Tag
...
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = [
        'title', 'category', 'status',
        'created_time', 'operator'
    ]
    list_display_links = []
    list_filter = ['category', ]
    search_fields = ['title', 'category__name']
    actions_on_top = True
    actions_on_bottom = True
    # 编辑页面
    save_on_top = True
    fields = (
        ('category', 'title'),
        'desc',
        'status',
        'content',
        'tag',
    )
    def operator(self, obj):
        return format_html(
            '<a href="{}">编辑<a/>',
            reverse('admin:blogs_post_change', args=(obj.id,))
        )
    operator.short_description = '操作'
    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(PostAdmin, self).save_model(request, obj, form, change)

list_display:用来配置列表页面展示哪些字段
list_display_links:用来配置哪些字段可以作为链接,点击它们,可以进入编辑页面
list_filter:配置页面过滤器,需要通过哪些字段来过滤列表页
search_fields:配置搜索字段
actions_on_top:动作相关的配置,是否展示在顶部
action_on_bottom:动作相关的配置,是否展示在底部
save_on_top:保存、编辑、编辑并新建按钮是否在顶部展示

自定义函数

在日常开发中,自定义函数很常用,除了可以自定义HTML代码外,还可以定义需要展示的其他内容。

# 比如在“分类”列表页,需要展示该分类下有多少篇文章
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'status', 'is_nav', 'created_time', 'post_count')
    fields = ('name', 'status', 'is_nav')
    def post_count(self, obj):
        return obj.post_set.count()
    post_count.short_description = '文章数量'

运行时会在页面上看见-Category object,这是因为没有配置__str__方法,对于每个Model都应该配置。

class Category(models.Model):
    ...
    def __str__(self):
        return self.name
Comment的Admin管理后台

comment/admin.py

from django.contrib import admin
from .models import Comment
@admin.register(Comment)
class CommentAdmin(admin.ModelAdmin):
    list_display = ('target', 'nickname', 'content', 'website', 'created_time')
Config的Admin管理后台

config/admin.py

from django.contrib import admin
from .models import Link, SideBar
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
    list_display = ('title', 'href', 'status', 'weight', 'created_time')
    fields = ('title', 'href', 'status', 'weight')
    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(LinkAdmin, self).save_model(request, obj, form, change)
@admin.register(SideBar)
class SideBarAdmin(admin.ModelAdmin):
    list_display = ('title', 'display_type', 'content', 'created_time')
    fields = ('title', 'display_type', 'content')
    def save_model(self, request, obj, form, change):
        obj.owner = request.user
        return super(SideBarAdmin, self).save_model(request, obj, form, change)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值