• 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']
  • 相关阅读:
    修改requests_html.AsyncHTMLSessions使得支持url参数
    MyBatis查询返回Map示例代码
    java.util.ConcurrentModificationException 异常原因和解决方法
    Springboot整合RabbitMQ(四)——设置消息过期时间TTL
    MySql Lock wait timeout exceeded该如何处理? (转载)
    对开发流程优化的建议
    容器未正常启动-->docker ps看不到,docker ps -a可以看到-->执行命令时出现Container is not running
    Linux下C语言多线程编程
    curl库相关使用
    PCB走线&过孔载流分析
  • 原文地址:https://www.cnblogs.com/kumata/p/9672155.html
Copyright © 2020-2023  润新知