1、自定义管理页面
自定义管理界面需要创建一个类,继承admin.ModelAdmin
booktest/admin.py
class BookInfoAdmin(admin.ModelAdmin): # Register your models here. # 参数1 注册的类 为哪个类注册后台管理页面 # 参数2 管理页面的显示的方式 admin.site.register(BookInfo, BookInfoAdmin) admin.site.register(HeroInfo)
list_display:指示BookInfo的管理页面会显示id、btitle、bpub_date三个字段:
# list_display:显示的字段 class BookInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'btitle', 'bpub_date']
list_filter:让被过滤字段显示在右侧
class BookInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'btitle', 'bpub_date'] list_filter = ['btitle']
search_fileds:搜索字段,搜索框会出现在上侧
class BookInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'btitle', 'bpub_date'] list_filter = ['btitle'] search_fields = ['btitle']
list_per_page:分页。分页框会出现在下侧
class BookInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'btitle', 'bpub_date'] list_filter = ['btitle'] search_fields = ['btitle'] list_per_page = 3
2、添加页面
fields:属性的先后顺序;点击“增加Book Info”按钮页面,在添加页面会有fields所指示的先后顺序
fields = ['bpub_date', 'btitle']
fieldsets:属性分组;点击“增加Book Info”按钮页面,在添加页面会有fieldssets中所指示的分组
fieldsets = [ ("basic",{'fields':['btitle']}), ("more",{'fields':['bpub_date']}) ]
注意:fields和fieldsets两者只能写一个
3、关联对象
考虑到BookInfo跟HeroInfo是一对多的关系。希望在增加BookInfo记录的同时,一起增加几个HeroInfo的记录。
此时,需要在注册的时候使用另外的属性来添加这个关系
定义一个类,继承admin.StackedInline或admin.TabularInline。表示内部增加其他记录
booktest/admin.py
class HeroInfoInline(admin.StackedInline): model = HeroInfo # 对应哪个模型 extra = 3 # 一次增加多少条记录 class BookInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'btitle', 'bpub_date'] list_filter = ['btitle'] search_fields = ['btitle'] list_per_page = 3 #fields = ['bpub_date', 'btitle'] fieldsets = [ ("basic",{'fields':['btitle']}), ("more",{'fields':['bpub_date']}) ] inlines = [HeroInfoInline]
现在在增加一本书的时候,同时会增加几个人物
4、显示布尔值
给HeroInfo加上类似的功能
class HeroInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'hname', 'hgender', 'hcontent'] admin.site.register(BookInfo, BookInfoAdmin) admin.site.register(HeroInfo, HeroInfoAdmin)
注意这里的性别hgender是用绿色的勾和红色的杠表示男和女。不太直观。可以考虑修改:
booktest/models.py
class HeroInfo(models.Model): # 设置字段 hname = models.CharField(max_length = 10) hgender = models.BooleanField() hcontent = models.CharField(max_length = 1000) hbook = models.ForeignKey(BookInfo, on_delete = models.CASCADE) def __str__(self): return self.hname def gender(self): if self.hgender: return '男' else: return '女' gender.short_description = '性别'
booktest/admin.py
class HeroInfoAdmin(admin.ModelAdmin): # 显示的字段 list_display = ['id', 'hname', 'gender', 'hcontent']