django -- admin里的配置
前戏
Django给我们提供了一个后台管理系统,方便我们进行数据表的管理
创建超级用户
- python manage.py createsuperuser
配置
默认我们登录到后台不显示任何一张表,如果需要显示,我们需要在我们创建的app下的admin下进行配置
- from django.contrib import admin
- from crm import models
- # Register your models here.
- '''
- 固定写法,只有点后面的是model里的表名
- '''
- admin.site.register(models.UserProfile)
- admin.site.register(models.Customer)
- admin.site.register(models.ClassList)
- admin.site.register(models.Campuses)
这样配置好之后我们重新启动项目,在登录后台查看,Django会在我们的表名后面加个s显示在页面上
如果我们想自定义显示内容,我们可以在model里面加个class Meta
- class Customer(models.Model):
- """
- 客户表
- """
- qq = models.CharField('QQ', max_length=64, unique=True, help_text='QQ号必须唯一') # help_textAdmin中该字段的提示信息 unique唯一索引
- qq_name = models.CharField('QQ昵称', max_length=64, blank=True, null=True) # blank Admin中是否允许用户输入为空 null数据库中字段是否可以为空
- name = models.CharField('姓名', max_length=32, blank=True, null=True, help_text='学员报名后,请改为真实姓名')
- sex_type = (('male', '男'), ('female', '女'))
- sex = models.CharField("性别", choices=sex_type, max_length=16, default='male', blank=True, null=True) # default数据库中字段的默认值
- birthday = models.DateField('出生日期', default=None, help_text="格式yyyy-mm-dd", blank=True, null=True)
- phone = models.BigIntegerField('手机号', blank=True, null=True)
- source = models.CharField('客户来源', max_length=64, choices=source_type, default='qq')
- introduce_from = models.ForeignKey('self', verbose_name="转介绍自学员", blank=True, null=True) # verbose_name Admin中显示的字段名称
- course = MultiSelectField("咨询课程", choices=course_choices)
- class_type = models.CharField("班级类型", max_length=64, choices=class_type_choices, default='fulltime')
- customer_note = models.TextField("客户备注", blank=True, null=True, )
- status = models.CharField("状态", choices=enroll_status_choices, max_length=64, default="unregistered",
- help_text="选择客户此时的状态")
- network_consult_note = models.TextField(blank=True, null=True, verbose_name='网络咨询师咨询内容')
- date = models.DateTimeField("咨询日期", auto_now_add=True)
- last_consult_date = models.DateField("最后跟进日期", auto_now_add=True)
- next_date = models.DateField("预计再次跟进时间", blank=True, null=True)
- network_consultant = models.ForeignKey('UserProfile', blank=True, null=True, verbose_name='咨询师',
- related_name='network_consultant')
- consultant = models.ForeignKey('UserProfile', verbose_name="销售", related_name='customers', blank=True, null=True, ) # related_name反向查找
- class_list = models.ManyToManyField('ClassList', verbose_name="已报班级", )
- class Meta:
- verbose_name = '客户列表' # 如果只加这句,后面的s还是显示的,需要在加下面的一句
- verbose_name_plural = '客户列表'
我们把上面的几个都加上Meta类,就能正常显示了
使用__str__在后台显示具体的内容
登录后台系统添加已报班级之后,页面显示的是一个对象,我们要把它转化为能看懂的,需要加上__str__方法
- class ClassList(models.Model):
- """
- 班级表
- """
- course = models.CharField("课程名称", max_length=64, choices=course_choices)
- semester = models.IntegerField("学期")
- campuses = models.ForeignKey('Campuses', verbose_name="校区")
- price = models.IntegerField("学费", default=10000)
- memo = models.CharField('说明', blank=True, null=True, max_length=100)
- start_date = models.DateField("开班日期")
- graduate_date = models.DateField("结业日期", blank=True, null=True)
- contract = models.ForeignKey('ContractTemplate', verbose_name="选择合同模版", blank=True, null=True)
- teachers = models.ManyToManyField('UserProfile', verbose_name="老师")
- class_type = models.CharField(choices=class_type_choices, max_length=64, verbose_name='班额及类型', blank=True,
- null=True)
- def __str__(self):
- return '{}{}({})'.format(self.get_course_display(),self.semester,self.campuses)
说明:
因为我们的course是选择的,数据来源为choise=course_choices
- course_choices = (('LinuxL', 'Linux中高级'), # 选择课程
- ('PythonFullStack', 'Python高级全栈开发'),)
self.get_course的结果为LinuxL或者PythonFullStack,如果使用 self.get_course_display() 结果就是后面的值,Linux中高级或者Python高级全栈开发
模版语言相关
把数据库里的数据查询出来展示在页面上,如果数据表里某一个字段值为空,则在页面上显示的是None,我们也可以使用filter给个默认值
- <td>{{ customer.qq_name|default:'暂无' }}</td>
如果是选择的,我们也可以使用get_字段名_display来获取对应的值
- <td>{{ customer.get_source_display }}</td>
注意:在模版中是不需要()的,在models.py里是需要()的
我们可以在model里定义一个方法,在模版里使用
- from django.utils.safestring import mark_safe
- class Customer(models.Model):
- """
- 客户表
- """
- qq = models.CharField('QQ', max_length=64, unique=True, help_text='QQ号必须唯一') # help_textAdmin中该字段的提示信息 unique唯一索引
- 定义了一个方法,用来根据状态显示不同的颜色
- def show_status(self):
- color_dict = {
- "signed": 'green',
- "unregistered": 'red',
- "studying": 'pink',
- "paid_in_full": 'blue',
- }
- return mark_safe(
- '<span style="background-color: {};color: white;padding: 4px">{}</span>'.format(color_dict[self.status],
- self.get_status_display()))
模版里使用
- <td>
- {{ customer.show_status }} 调用的show_status方法
- </td>
如果不使用mark_safe,也可以在模版里使用
- <td>
- {{ customer.show_status|safe }}
- </td>
因为我们的data字段和last_consult_data是使用下面的字段来定义的
- date = models.DateTimeField("咨询日期", auto_now_add=True)
- last_consult_date = models.DateField("最后跟进日期", auto_now_add=True)
所以在页面显示效果如下
这时我们有两种方法来显示成我们需要的格式,第一种是使用filter,第二种是在settings.py里增加两行代码并修改一行代码
这时候刷新页面就能正常显示了
因为我们的 Customer 表和 ClassList 表是多对多的关系
- class_list = models.ManyToManyField('ClassList', verbose_name="已报班级", )
所以如果要查询所有的书我们可以写一个方法
- def show_classes(self):
- return ' | '.join([str(i) for i in self.class_list.all()])
模版中使用
- <td>{{ customer.show_classes }}</td>
django -- admin里的配置的更多相关文章
- django admin的实用配置
https://www.cnblogs.com/wumingxiaoyao/p/6928297.html
- django admin配置以及使用
admin组件使用 Django 提供了基于 web 的管理工具(django 2.0+, python3.6+). Django 自动管理工具是 django.contrib 的一部分.你可以在项目 ...
- Django admin美化插件suit应用[原创]
前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...
- Django基础之安装配置
安装配置 一 MVC和MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的 ...
- Django admin 权威指南(一)
版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...
- Django Admin 简单部署上线
前言 打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化 如图: 是不是比原来的漂亮多了. ...
- Django admin 组件 原理分析与扩展使用 之 sites.py (一)
一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...
- django admin 设置(转载https://www.cnblogs.com/wumingxiaoyao/p/6928297.html)
Django admin 一些有用的设置 Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸 ...
- Django中的路由配置简介
Django中的路由配置简介 路由配置(URLconf)就是Django所支撑网站的目录.其实,我们利用路由交换中的"寻址"的概念去理解Django的路由控制会简单很多,它的本质就 ...
随机推荐
- virsh 查看信息
获取域网络接口信息 virsh domiflist debian8 获取vcpu信息 virsh vcpuinfo debian8 设定内存最大内存 virsh setmaxmem debian8 9 ...
- Ubuntu Err:1 http://us.archive.ubuntu.com/ubuntu bionic InRelease Could not resolve 'us.archive.ubuntu.com' 错误
Ubuntu 更新 apt-get update 的时候 出现 Err: http://us.archive.ubuntu.com/ubuntu bionic InRelease Could not ...
- Enum.GetUnderlyingType(obj.GetType())
Enum.GetUnderlyingType(obj.GetType())获取保存枚举值的数据类型:
- netCore3.0+webapi到前端vue(前端)
前篇已经完成后端配置并获取到api连接 https://www.cnblogs.com/ouyangkai/p/11504279.html 前端项目用的是VS code编译器完成 vue 第一步 引入 ...
- SQL Server温故系列(0):导航目录
创建本系列博文通用库表及数据的 SQL 语句:下载 SQL Server温故系列(0):导航目录 SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合 SQL Server温故系 ...
- c# 如何获取当前方法的调用堆栈
c# 调试程序时常常需要借助 call stack 查看调用堆栈,实际上通过code也可以获取: class Program { static void Main(string[] args) { T ...
- Flask补充--threading.local对象
目录 Local 局部变量 全局变量 使用threading.local() 自定义threading.local 函数版 面向对象版 通过setattr和getattr实现 每个对象有自己的存储空间 ...
- Docker 容器命令大全
容器命令: 命令 描述 attach 将本地标准输入,输出和错误流转到到正在运行的容器 build 从Dockerfile构建映像 commit 根据容器的更改创建新镜像 cp 在容器和本地文件系统之 ...
- php对象复制、clone、浅复制与深复制实例详解
php对象复制.clone.浅复制与深复制实例详解 一.用clone(克隆)来复制对象$obj1 = new Object();$obj2 = clone $obj1;clone方法会触发对象里定义的 ...
- 「白帽挖洞技能」YxCMS 1.4.7 漏洞分析
这几天有小伙伴留言给我们,想看一些关于后台的漏洞分析,今天i春秋选择YxCMS 1.4.7版本,理论内容结合实际案例进行深度分析,帮助大家提升挖洞技能. 注:篇幅较长,阅读用时约7分钟. YXcms是 ...