美文网首页
Django常用[Admin站点]

Django常用[Admin站点]

作者: 錦魚 | 来源:发表于2018-11-04 20:06 被阅读0次

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

    在第一部分对管理站点做了简单介绍,现在做详细讲解。在Django项目中默认启用Admin管理站点。

    1)准备工作:创建管理员的用户名和密码。

    python manage.py createsuperuser

    • 按提示填写用户名、邮箱、密码。
    2)使用:在应用的admin.py中注册模型类
    • 例:打开booktest/admin.py文件,注册地区模型。
    from django.contrib import admin
    from booktest.models import *
    
    admin.site.register(AreaInfo)
    
    3)进入如下网址:

    http://127.0.0.1:8000/admin/

    • 按提示填写用户名、密码,点击“Log in”按钮登录。
    • 登录成功后,可以看到AreaInfos,可以进行增加、修改、删除、查询的管理。

    控制管理页展示

    类ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式。

    1)在booktest/admin.py中,注册模型类前定义管理类AreaAdmin。
    class AreaAdmin(admin.ModelAdmin):
        pass
    
    • 管理类有两种使用方式:
      • ( 1 ) 注册参数
      • ( 2 ) 装饰器

    注册参数:

    打开booktest/admin.py文件,注册模型类代码如下:

     admin.site.register(AreaInfo,AreaAdmin)
    

    装饰器:

    打开booktest/admin.py文件,在管理类上注册模型类,代码如下:

     @admin.register(AreaInfo)
     class AreaAdmin(admin.ModelAdmin):
         pass
    

    接下来介绍如何控制列表页、增加修改页展示效果。



    列表页选项

    页大小

    每页中显示多少条数据,默认为每页显示100条数据,属性如下:

    list_per_page=100

    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        list_per_page = 10
    
    2)在浏览器中查看区域信息的列表页面

    "操作选项"的位置

    顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True。
     actions_on_top=True
    
    底部显示的属性,设置为True在底部显示,设置为False不在底部显示,默认为False。
     actions_on_bottom=False
    
    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        actions_on_top = True
        actions_on_bottom = True
    
    2)在浏览器中刷新效果


    列表中的列属性如下:

    list_display=[模型字段1,模型字段2,...]

    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        list_display = ['id','atitle']
    
    2)在浏览器中刷新效果
    • 点击列头可以进行升序或降序排列。

    将方法作为列

    列可以是模型字段,还可以是模型方法,要求方法有返回值

    1)打开booktest/models.py文件,修改AreaInfo类如下:
    class AreaInfo(models.Model):
        ...
        def title(self):
            return self.atitle
    
    2)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        list_display = ['id','atitle','title']
    
    3)在浏览器中刷新效果

    方法列是不能排序的,如果需要排序需要为方法指定排序依据。

    admin_order_field=模型类字段
    
    1)打开booktest/models.py文件,修改AreaInfo类如下:
    class AreaInfo(models.Model):
        ...
        def title(self):
        return self.atitle
        title.admin_order_field='atitle'
    
    2)在浏览器中刷新效果

    列标题

    • 列标题默认为属性或方法的名称,可以通过属性设置。需要先将模型字段封装成方法,再对方法使用这个属性,模型字段不能直接使用这个属性。
      short_description='列标题'
    1)打开booktest/models.py文件,修改AreaInfo类如下:
    class AreaInfo(models.Model):
        ...
        title.short_description='区域名称'
    
    2)在浏览器中刷新效果

    关联对象

    • 无法直接访问关联对象的属性或方法,可以在模型类中封装方法,访问关联对象的成员。
    1)打开booktest/models.py文件,修改AreaInfo类如下:
    class AreaInfo(models.Model):
        ...
        def parent(self):
            if self.aParent is None:
                return ''
            return self.aParent.atitle
        parent.short_description='父级区域名称'
    
    2)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        list_display = ['id','atitle','title','parent']
    

    右侧栏过滤器

    属性如下,只能接收字段,会将对应字段的值列出来,用于快速过滤。一般用于有重复值的字段。
    list_filter=[]

    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        list_filter=['atitle']
    
    2)在浏览器中刷新效果

    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        list_filter=['atitle']
    
    2)在浏览器中刷新效果

    搜索框

    属性如下,用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。

    search_fields=[]
    
    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        search_fields=['atitle']
    
    2)在浏览器中刷新效果如下图:

    中文标题

    1)打开booktest/models.py文件,修改模型类,为属性指定verbose_name参数,即第一个参数。
    class AreaInfo(models.Model):
        atitle=models.CharField('标题',max_length=30)#名称
        ...
    
    2)在浏览器中刷新效果

    编辑页选项

    显示字段顺序

    属性如下:

    fields=[]
    
    1)点击某行ID的链接,可以转到修改页面,默认效果
    2)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        fields=['aParent','atitle']
    
    3)刷新浏览器效果

    在下拉列表中输出的是对象的名称,可以在模型类中定义str方法用于对象转换字符串。
    1)打开booktest/models.py文件,修改AreaInfo类,添加str方法。
    class AreaInfo(models.Model):
        ...
    def __str__(self):
        return self.atitle
    
    2)刷新浏览器效果

    分组显示

    属性如下:
    fieldset=(
        ('组1标题',{'fields':('字段1','字段2')}),
        ('组2标题',{'fields':('字段3','字段4')}),
    )
    
    1)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        # fields=['aParent','atitle']
        fieldsets = (
            ('基本', {'fields': ['atitle']}),
            ('高级', {'fields': ['aParent']})
        )
    
    2)刷新浏览器效果
    说明:fields与fieldsets两者选一使用。


    关联对象

    在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。

    • 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。
    • 子类TabularInline:以表格的形式嵌入。
    • 子类StackedInline:以块的形式嵌入。
    1)打开booktest/admin.py文件,创建AreaStackedInline类。
    class AreaStackedInline(admin.StackedInline):
        model = AreaInfo#关联子对象
        extra = 2#额外编辑2个子对象
    
    2)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        inlines = [AreaStackedInline]
    
    3)刷新浏览器效果

    可以用表格的形式嵌入。

    1)打开booktest/admin.py文件,创建AreaTabularInline类。
    class AreaTabularInline(admin.TabularInline):
        model = AreaInfo#关联子对象
        extra = 2#额外编辑2个子对象
    
    2)打开booktest/admin.py文件,修改AreaAdmin类如下:
    class AreaAdmin(admin.ModelAdmin):
        ...
        inlines = [AreaTabularInline]
    
    3)刷新浏览器效果

    重写模板

    1)在templates/目录下创建admin目录,结构如下图:
    2)打开当前虚拟环境中Django的目录,再向下找到admin的模板,目录如下:
    /home/`用户名`/.virtualenvs/`虚拟环境名`/lib/python3.5/site-packages/django/contrib/admin/templates/admin
    
    3)将需要更改文件拷贝到第一步建好的目录里,此处以base_site.html为例。
    编辑base_site.html文件:
    {% extends "admin/base.html" %}
    {% block title %}
        {{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}
    {% block branding %}
    <h1 id="site-name">
        <a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a>
    </h1>
    <hr>
    <h1>自定义的管理页模板</h1>
    <hr>
    {% endblock %}
    {% block nav-global %}{% endblock %}
    
    4)在浏览器中转到列表页面,刷新
    • 其它后台的模板可以按照相同的方式进行修改。

    相关文章

      网友评论

          本文标题:Django常用[Admin站点]

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