美文网首页Django专题学习
Django中admin后台管理常用设置系列之十六

Django中admin后台管理常用设置系列之十六

作者: 晓可加油 | 来源:发表于2017-07-07 14:32 被阅读157次

    定义

    内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块

    在Django项目中默认启用Admin管理站点

    • 创建管理员的用户名和密码

    python manage.py createsuperuser

    • 按提示填写用户名、邮箱、密码

    模型类代码

    from django.db import models
    class AreaInfo(models.Model):
        #地区名,给模型字段设置标题用verbose_name
        atitle = models.CharField(verbose_name='标题', max_length=20) 
        
        #关系属性, 自关联
        aParent = models.ForeignKey('self', null=True, blank=True) 
        
        # 模型类中封装方法,访问关联对象title的成员
        def title(self):
            return self.atitle.encode('utf-8')
        #指定方法列按照哪个字段来排序,默认不能点击,设置完后,可以点击
        title.admin_order_field = 'atitle'
        # 设置title显示为'当前地区名称',注意模型字段不能直接使用这个属性
        # 模型字段使用verbose_name
        title.short_description = '当前地区名称'
        
        #模型类中封装方法,访问关联对象parent的成员
        #返回当前地区父级地区的标题
        def parent(self):
            if self.aParent:
                return self.aParent.atitle.encode('utf-8')
            else:
                return ''
        # 设置parent显示为'父级地区名称',注意模型字段不能直接使用这个属性
        parent.short_description = '父级地区名称'
        
        # 显示标题内容,不再是AreaInfo object
        def __str__(self):
            return self.atitle.encode('utf-8')
    

    admin管理代码

    class AreaStackedInline(admin.StackedInline):
        model = AreaInfo
        # 控制最后显示的空白块,默认3个块,设置为2个块
        extra = 2
    
    class AreaTabularInline(admin.TabularInline):
        model = AreaInfo
        # 控制最后显示的空白表格,默认3条,设置为2条
        extra = 2
    
    #自定义模型管理类
    #第二种注册模型类
    @admin.register(AreaInfo)
    class AreaInfoAdmin(admin.ModelAdmin):
        #每页显示10条数据
        list_per_page = 10
        
        #在底部显示控制选项
        actions_on_bottom = True 
        #在顶部显示控制选项
        actions_on_top = False  
        
        #控制列表页显示表的哪些字段
        list_display = ['id', 'atitle', 'title', 'parent'] 
        
        #侧边栏过滤框
        list_filter = ['atitle'] 
    
        #搜索框
        search_fields = ['atitle'] 
        
        # 以下二者只能选其一
        #fields = ['aParent', 'atitle']
        fieldsets = [
            ('基本', {'fields':['atitle']}),
            ('高级', {'fields':['aParent']})
        ]
        
        #在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种
        #类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑
        #子类TabularInline:以表格的形式嵌入
        #子类StackedInline:以块的形式嵌入
        
        # 以块的形式展示数据
        #inlines = [AreaStackedInline,]
        # 以表格的形式展示数据
        inlines = [AreaTabularInline,]
    
    #第一种注册模型类
    #admin.site.register(AreaInfo, AreaInfoAdmin) 
    

    相关文章

      网友评论

        本文标题:Django中admin后台管理常用设置系列之十六

        本文链接:https://www.haomeiwen.com/subject/hpnlhxtx.html