Django08——自定义管理页面(图书人物案例)


使用Django自带的后台,在列表页只显示出了一个字段,对象的其它属性并没有列出来,查看非常不方便。 Django提供了自定义管理页面的功能。

1、ModelAdmin对象

ModelAdmin类是模型在Admin界面中的表示形式
定义:定义一个类,继承于admin.ModelAdmin,注册模型时使用这个类。

class HeroAdmin(admin.ModelAdmin):
    list_per_page = 5 #设置每页显示5条记录
    actions_on_top = True #设置操作在页面的顶部显示
    actions_on_bottom = True #设置操作在页面的底部显示
    # 自定义显示列
    list_display = ["id","hname","hgender","hbook","hcontent","isDelete"]
    list_filter = ['hname','hbook'] #设置列表右侧过滤器
    search_fields = ['hname'] #设置搜索的字段

admin.site.register(HeroInfo,HeroAdmin)

效果如下所示:
在这里插入图片描述
现在字段标题为英文,可以通过在模型定义的时候在字段Field()中添加参数verbose_name,自定义后台字段显示标题名。

2、InlineModelAdmin对象

在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。

类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。

子类TabularInline:以表格的形式嵌入

子类StackedInline:以块的形式嵌入

class HeroInline(admin.TabularInline):
       model = HeroInfo
       extra = 2 #每次增加两个添加人物的表单

class BookAdmin(admin.ModelAdmin):
    list_per_page = 10  #设置每页显示10条记录
    # 自定义显示列
    list_display = ["id", "btitle", "bpublish", "bread", "bcomment", "isDelete"]
    list_display_links = ["id", "btitle"] #给这些字段设置链接,点击可以编辑
    search_fields = ['btitle',] #设置搜索的字段
    inlines = [HeroInline,  ] #设置嵌入方式

在这里插入图片描述
刷新后台,查看结果。

3、修改表名和后台字段、后台模型显示中文

解决表名命名、后台字段显示中文、后台模型显示中文:
应用下的models.py文件:

在这里插入图片描述

class BookInfo(models.Model):  #图书模型
    btitle = models.CharField(max_length=50,verbose_name="图书名称") #图书名称
    bpublish = models.DateField(verbose_name='出版日期') #出版日期
    bread = models.IntegerField(default=0,verbose_name='浏览量') #图书的浏览量,默认为0
    bcomment = models.IntegerField(default=0,verbose_name='评论数') #图书的评论数,默认为0
    isDelete = models.BooleanField(default=False,verbose_name='是否删除')#逻辑删除,默认值为false。

    class Meta:
        db_table = "bookinfo" #设置表名
        ordering = ['-bpublish'] #设置提取数据时按出版日期倒序排序
        # verbose_name表示单数形式的显示,
        # verbose_name_plural表示复数形式的显示;中文的单数和复数一般不作区别。
        verbose_name = "图书"  #让应用下注册的 model 显示为中文
        verbose_name_plural = verbose_name

    def __str__(self): #设置输出对象时的信息
        return self.btitle

在这里插入图片描述

class HeroInfo(models.Model):
    hname = models.CharField(max_length=30,verbose_name="人物名称") #人物名称
    hgender = models.BooleanField(default=True,verbose_name="人物性别") #人物性别,True为男
    hcontent = models.TextField(verbose_name="人物简介") #人物简介
    isDelete = models.BooleanField(default=False,verbose_name="是否删除")#逻辑删除,默认值为false。
    # # 多的一端写外键
    hbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE,verbose_name="所属图书") #定义外键,级联删除

    class Meta:
        db_table = "heroinfo" #设置表名
        verbose_name = "人物"  #设置模型在后台的中文显示,单数
        verbose_name_plural = verbose_name #复数

    def gender(self):
        if self.hgender:
            return '男'
        else:
            return '女'
    gender.short_description = '性别'  #给方法命名一个标题

    def __str__(self): #设置输出对象时的信息
        return self.hname

凡是修改了模型,必须重新迁移。

4、后台显示性别为“男”、“女”

在这里插入图片描述

5、后台应用名称显示中文

在这里插入图片描述
在这里插入图片描述
如果应用在apps下,则修改为:
在这里插入图片描述
登录后台,效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值