• Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容


    后台管理

    第1步、本地化:设置语言、时区

    修改project1/settings.py

    #LANGUAGE_CODE = 'en-us'
    LANGUAGE_CODE = 'zh-hans' #设置语言为中文
    
    # TIME_ZONE = 'UTC'
    TIME_ZONE = 'Asia/Shanghai' #设置为中国时区
    

    第2步,创建管理员

    项目下打开cmd输入命令:python manage.py createsuperuser
    实操:

    >>> quit() #退出shell环境
    
    D:adjango-appproject1>py manage.py createsuperuser
    用户名 (leave blank to use 'administrator'): admin
    电子邮件地址: test@qq.com
    Password:
    Password (again):
    密码跟 用户名 太相似了。
    密码长度太短。密码必须包含至少 8 个字符。
    这个密码太常见了。
    Bypass password validation and create user anyway? [y/N]: y
    Superuser created successfully.
    
    py manage.py runserver
    

    打开浏览器输入刚创建的用户名密码:http://127.0.0.1:8000/admin/
    在这里插入图片描述

    第3步,注册模型类

    在应用下的admin.py中注册模型类。
    告诉djang框架根据注册的模型类来生成对应表管理页面。

    b = BookInfo()
    str(b) __str__
    

    1)project1/admin.py

    from django.contrib import admin #导入admin模块
    from app1.models import BookInfo,HeroInfo #导入模型模块
    # Register your models here.
    
    admin.site.register(BookInfo) # 注册模型类BookInfo
    

    注册完成刷新页面就会展示模型类:
    在这里插入图片描述

    2)Book info名字哪里来

    在这里插入图片描述

    查询表【1】

    D:adjango-appproject1>py manage.py shell
    Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD6
    4)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from app1.models import BookInfo
    >>> b2=BookInfo.objects.all()
    >>> b2
    <QuerySet [<BookInfo: BookInfo object (3)>, <BookInfo: BookInfo object (4)>]> #冒号后面的:BookInfo即是第2/3个箭头的名字由来
    >>>
    

    ★★★改变默认显示名

    在app1/models.py里对应的model类加入如下代码

    【新加入的代码】

    # 一类
    # 图书类
    class BookInfo(models.Model):
        '''图书模型类'''
        # 图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度
        btitle = models.CharField(max_length=20)
        # 出版日期,DateField说明是一个日期类型
        bpub_date = models.DateField()
    
    #【新加入的代码】
        def __str__(self): #重定义系统的str方法,让它返回对应图书的名字
            return self.btitle
    

    查询表【2】注意查询出的b的名称变化

    说明

    b由
    <QuerySet [<BookInfo: BookInfo object (3)>, <BookInfo: BookInfo object (4)>]>
    变
    <QuerySet [<BookInfo: 天龙八部>, <BookInfo: 射雕英雄传>]>
    

    实操

    >>> quit() #退出shell,下面重新进入,让代码生效
    
    D:adjango-appproject1>py manage.py shell
    Python 3.7.1 (v3.7.1:260ec2c36a, Oct 20 2018, 14:57:15) [MSC v.1915 64 bit (AMD6
    4)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>> from app1.models import BookInfo
    >>> b=BookInfo.objects.all()
    >>> b
    <QuerySet [<BookInfo: 天龙八部>, <BookInfo: 射雕英雄传>]>
    

    再看表:箭头处已经改变
    在这里插入图片描述

    把HeroInfo也注册到admin里,并让其显示英雄名

    1) app1/admin.py

    from django.contrib import admin #导入admin模块
    from app1.models import BookInfo,HeroInfo #导入模型模块
    # Register your models here.
    
    admin.site.register(BookInfo) # 注册图书model类
    admin.site.register(HeroInfo) # 注册英雄model类
    

    2) app1/models.py

    重点:
    【返回对应图书的名字】
    【返回英雄名】

    from django.db import models
    # 设计和表对应的类,模型类
    # Create your models here.
    
    # 一类
    # 图书类
    class BookInfo(models.Model):
        '''图书模型类'''
        # 图书名称,CharField说明是一个字符串,max_length指定字符串的最大长度
        btitle = models.CharField(max_length=20)
        # 出版日期,DateField说明是一个日期类型
        bpub_date = models.DateField()
    
        def __str__(self): #重定义系统的str方法,让它【返回对应图书的名字】
            return self.btitle
    
    # 多类
    # 英雄人物类
    # 英雄名 hname
    # 性别 hgender
    # 年龄 hage
    # 备注 hcomment
    # 关系属性 hbook,建立图书类和英雄人物类之间的一对多关系
    class HeroInfo(models.Model):
        '''英雄人物模型类'''
        hname = models.CharField(max_length=20) # 英雄名称
        # 性别,BooleanField说明是bool类型,default指定默认值,False代表男
        hgender = models.BooleanField(default=False)
        # 备注
        hcomment = models.CharField(max_length=128)
        # 关系属性 hbook,建立图书类和英雄人物类之间的一对多关系
        # 关系属性对应的表的字段名格式: 关系属性名_id
        hbook = models.ForeignKey('BookInfo', on_delete=models.CASCADE) #对应BookInfo表的主键ID
    
        def __str__(self): #【返回英雄名】
            return self.hname
    

    页面效果:
    在这里插入图片描述
    在这里插入图片描述

    3)增加个信息试试

    在这里插入图片描述

    第4步,自定义管理页面显示内容

    自定义模型管理类。模型管理类就是告诉django在生成的管理页面上显示哪些内容。

    0)例如book info正常是这样显示的,我们想让它显示出图书的其它信息:ID、书标题、出版日期

    在这里插入图片描述

    1)app1/admin.py 写自定义样式控制类,并挂载到注册上

    【1】自定义类:控制页面显示内容(类名随意写),写完之后,要在注册模型那里加上此处写的类名做为参数才能真正显示
    【2】把自定类样式作为参数挂载到注册部分

    from django.contrib import admin #导入admin模块
    from app1.models import BookInfo,HeroInfo #导入模型模块
    # Register your models here.
    
    # 【1】自定义类:控制页面显示内容(类名随意写),写完之后,要在注册模型那里加上此处写的类名做为参数才能真正显示
    class control_view_Admin(admin.ModelAdmin):
        '''自定义:图书样式管理类'''
        list_display = ['id','btitle','bpub_date']  #list_display为显示指定表内容的固定写法
    
    #注册类模型
    admin.site.register(BookInfo,control_view_Admin) #【2】把自定类样式作为参数挂载到注册部分
    admin.site.register(HeroInfo)
    

    2)效果:

    在这里插入图片描述

    4步扩展,把heroinfo信息也显示出来

    from django.contrib import admin #导入admin模块
    from app1.models import BookInfo,HeroInfo #导入模型模块
    # Register your models here.
    
    # 自定义类:控制页面显示内容(类名随意写),写完之后,要在注册模型那里加上此处写的类名做为参数才能真正显示
    class control_bookview_admin(admin.ModelAdmin):
        '''自定义:图书样式管理类'''
        list_display = ['id','btitle','bpub_date']  #list_display为显示指定表内容的固定写法
    
    class control_heroview_admin(admin.ModelAdmin):
        list_display = ['id','hname','hgender','hcomment']
    
    #注册类模型,control_view_Admin
    admin.site.register(BookInfo,control_bookview_admin)
    admin.site.register(HeroInfo,control_heroview_admin)
    

    效果:
    在这里插入图片描述

  • 相关阅读:
    express 连接 moogdb 数据库
    数组 去重
    vue 路由meta 设置title 导航隐藏
    :src 三目运算
    axios baseURL
    js对象修改 键
    Swiper隐藏后在显示滑动问题
    字符串中的替换
    获取服务器时间
    vue a链接 添加参数
  • 原文地址:https://www.cnblogs.com/chenxi188/p/12176651.html
Copyright © 2020-2023  润新知