Django专题学习

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

2017-07-07  本文已影响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) 
上一篇下一篇

猜你喜欢

热点阅读