使用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下,则修改为:
登录后台,效果如下: