Django:管理站点

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的管理页面会显示idbtitlebpub_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']})
]

注意:fieldsfieldsets两者只能写一个

 3、关联对象

考虑到BookInfoHeroInfo是一对多的关系。希望在增加BookInfo记录的同时,一起增加几个HeroInfo的记录。

此时,需要在注册的时候使用另外的属性来添加这个关系

定义一个类,继承admin.StackedInlineadmin.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']

 

posted @ 2018-09-18 23:38  kumata  阅读(211)  评论(0编辑  收藏  举报