前戏

Django给我们提供了一个后台管理系统,方便我们进行数据表的管理

创建超级用户

  1. python manage.py createsuperuser

配置

默认我们登录到后台不显示任何一张表,如果需要显示,我们需要在我们创建的app下的admin下进行配置

  1. from django.contrib import admin
  2. from crm import models
  3. # Register your models here.
  4.  
  5. '''
  6. 固定写法,只有点后面的是model里的表名
  7. '''
  8. admin.site.register(models.UserProfile)
  9. admin.site.register(models.Customer)
  10. admin.site.register(models.ClassList)
  11. admin.site.register(models.Campuses)

这样配置好之后我们重新启动项目,在登录后台查看,Django会在我们的表名后面加个s显示在页面上

如果我们想自定义显示内容,我们可以在model里面加个class Meta

  1. class Customer(models.Model):
  2. """
  3. 客户表
  4. """
  5. qq = models.CharField('QQ', max_length=64, unique=True, help_text='QQ号必须唯一') # help_textAdmin中该字段的提示信息 unique唯一索引
  6. qq_name = models.CharField('QQ昵称', max_length=64, blank=True, null=True) # blank Admin中是否允许用户输入为空 null数据库中字段是否可以为空
  7. name = models.CharField('姓名', max_length=32, blank=True, null=True, help_text='学员报名后,请改为真实姓名')
  8. sex_type = (('male', '男'), ('female', '女'))
  9. sex = models.CharField("性别", choices=sex_type, max_length=16, default='male', blank=True, null=True) # default数据库中字段的默认值
  10. birthday = models.DateField('出生日期', default=None, help_text="格式yyyy-mm-dd", blank=True, null=True)
  11. phone = models.BigIntegerField('手机号', blank=True, null=True)
  12. source = models.CharField('客户来源', max_length=64, choices=source_type, default='qq')
  13. introduce_from = models.ForeignKey('self', verbose_name="转介绍自学员", blank=True, null=True) # verbose_name Admin中显示的字段名称
  14. course = MultiSelectField("咨询课程", choices=course_choices)
  15. class_type = models.CharField("班级类型", max_length=64, choices=class_type_choices, default='fulltime')
  16. customer_note = models.TextField("客户备注", blank=True, null=True, )
  17. status = models.CharField("状态", choices=enroll_status_choices, max_length=64, default="unregistered",
  18. help_text="选择客户此时的状态")
  19. network_consult_note = models.TextField(blank=True, null=True, verbose_name='网络咨询师咨询内容')
  20. date = models.DateTimeField("咨询日期", auto_now_add=True)
  21. last_consult_date = models.DateField("最后跟进日期", auto_now_add=True)
  22. next_date = models.DateField("预计再次跟进时间", blank=True, null=True)
  23. network_consultant = models.ForeignKey('UserProfile', blank=True, null=True, verbose_name='咨询师',
  24. related_name='network_consultant')
  25. consultant = models.ForeignKey('UserProfile', verbose_name="销售", related_name='customers', blank=True, null=True, ) # related_name反向查找
  26. class_list = models.ManyToManyField('ClassList', verbose_name="已报班级", )
  27.  
  28. class Meta:
  29. verbose_name = '客户列表' # 如果只加这句,后面的s还是显示的,需要在加下面的一句
  30. verbose_name_plural = '客户列表'

我们把上面的几个都加上Meta类,就能正常显示了

使用__str__在后台显示具体的内容

登录后台系统添加已报班级之后,页面显示的是一个对象,我们要把它转化为能看懂的,需要加上__str__方法

  1. class ClassList(models.Model):
  2. """
  3. 班级表
  4. """
  5. course = models.CharField("课程名称", max_length=64, choices=course_choices)
  6. semester = models.IntegerField("学期")
  7. campuses = models.ForeignKey('Campuses', verbose_name="校区")
  8. price = models.IntegerField("学费", default=10000)
  9. memo = models.CharField('说明', blank=True, null=True, max_length=100)
  10. start_date = models.DateField("开班日期")
  11. graduate_date = models.DateField("结业日期", blank=True, null=True)
  12. contract = models.ForeignKey('ContractTemplate', verbose_name="选择合同模版", blank=True, null=True)
  13. teachers = models.ManyToManyField('UserProfile', verbose_name="老师")
  14. class_type = models.CharField(choices=class_type_choices, max_length=64, verbose_name='班额及类型', blank=True,
  15. null=True)
  16. def __str__(self):
  17. return '{}{}({})'.format(self.get_course_display(),self.semester,self.campuses)

说明:

因为我们的course是选择的,数据来源为choise=course_choices

  1. course_choices = (('LinuxL', 'Linux中高级'), # 选择课程
  2. ('PythonFullStack', 'Python高级全栈开发'),)

self.get_course的结果为LinuxL或者PythonFullStack,如果使用 self.get_course_display() 结果就是后面的值,Linux中高级或者Python高级全栈开发

模版语言相关

把数据库里的数据查询出来展示在页面上,如果数据表里某一个字段值为空,则在页面上显示的是None,我们也可以使用filter给个默认值

  1. <td>{{ customer.qq_name|default:'暂无' }}</td>

如果是选择的,我们也可以使用get_字段名_display来获取对应的值

  1. <td>{{ customer.get_source_display }}</td>

注意:在模版中是不需要()的,在models.py里是需要()的

我们可以在model里定义一个方法,在模版里使用

  1.  
  1. from django.utils.safestring import mark_safe
  1.  
  2. class Customer(models.Model):
  3. """
  4. 客户表
  5. """
  6. qq = models.CharField('QQ', max_length=64, unique=True, help_text='QQ号必须唯一') # help_textAdmin中该字段的提示信息 unique唯一索引
  7.  
  8.   定义了一个方法,用来根据状态显示不同的颜色
  9. def show_status(self):
  10. color_dict = {
  11. "signed": 'green',
  12. "unregistered": 'red',
  13. "studying": 'pink',
  14. "paid_in_full": 'blue',
  15.  
  16. }
  17. return mark_safe(
  18. '<span style="background-color: {};color: white;padding: 4px">{}</span>'.format(color_dict[self.status],
  19. self.get_status_display()))

模版里使用

  1. <td>
  2. {{ customer.show_status }} 调用的show_status方法
  3. </td>

如果不使用mark_safe,也可以在模版里使用

  1. <td>
  2. {{ customer.show_status|safe }}
  3. </td>

因为我们的data字段和last_consult_data是使用下面的字段来定义的

  1. date = models.DateTimeField("咨询日期", auto_now_add=True)
  2. last_consult_date = models.DateField("最后跟进日期", auto_now_add=True)

所以在页面显示效果如下

这时我们有两种方法来显示成我们需要的格式,第一种是使用filter,第二种是在settings.py里增加两行代码并修改一行代码

这时候刷新页面就能正常显示了

因为我们的 Customer 表和 ClassList 表是多对多的关系

  1. class_list = models.ManyToManyField('ClassList', verbose_name="已报班级", )

所以如果要查询所有的书我们可以写一个方法

  1. def show_classes(self):
  2. return ' | '.join([str(i) for i in self.class_list.all()])

模版中使用

  1. <td>{{ customer.show_classes }}</td>

django -- admin里的配置的更多相关文章

  1. django admin的实用配置

    https://www.cnblogs.com/wumingxiaoyao/p/6928297.html

  2. django admin配置以及使用

    admin组件使用 Django 提供了基于 web 的管理工具(django 2.0+, python3.6+). Django 自动管理工具是 django.contrib 的一部分.你可以在项目 ...

  3. Django admin美化插件suit应用[原创]

    前言 由于比较懒,自己弄了一个用户验证,没有自己写后台,用了django自带的user认证,并通过admin直接进行管理,但默认的admin并不漂亮,于是使用了这个django-suit插件,效果对比 ...

  4. Django基础之安装配置

    安装配置 一 MVC和MTV模式 著名的MVC模式:所谓MVC就是把web应用分为模型(M),控制器(C),视图(V)三层:他们之间以一种插件似的,松耦合的方式连接在一起. 模型负责业务对象与数据库的 ...

  5. Django admin 权威指南(一)

    版本: Django 1.10 此部分由官方文档<6.5.1 The Django admin site>翻译而来. 6.5.1.1 概览 默认情况下,使用startproject的时候, ...

  6. Django Admin 简单部署上线

    前言 打算为公司弄一个管理公用密码的平台,由于比较懒,就选择使用Django admin,默认的admin并不漂亮,于是我使用了这个django-suit插件来美化 如图: 是不是比原来的漂亮多了. ...

  7. Django admin 组件 原理分析与扩展使用 之 sites.py (一)

    一 . 前言 Django 提供了admin 组件 为项目提供基本的管理后台功能(对数据表的增删改查). 本篇文章通过 admin源码 简单分析admin 内部原理 ,扩展使用方式,为以后进行定制和自 ...

  8. django admin 设置(转载https://www.cnblogs.com/wumingxiaoyao/p/6928297.html)

    Django admin 一些有用的设置   Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据.后台管理可以在各个app的admin.py文件中进行控制.以下是我最近摸 ...

  9. Django中的路由配置简介

    Django中的路由配置简介 路由配置(URLconf)就是Django所支撑网站的目录.其实,我们利用路由交换中的"寻址"的概念去理解Django的路由控制会简单很多,它的本质就 ...

随机推荐

  1. virsh 查看信息

    获取域网络接口信息 virsh domiflist debian8 获取vcpu信息 virsh vcpuinfo debian8 设定内存最大内存 virsh setmaxmem debian8 9 ...

  2. 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 ...

  3. Enum.GetUnderlyingType(obj.GetType())

    Enum.GetUnderlyingType(obj.GetType())获取保存枚举值的数据类型:

  4. netCore3.0+webapi到前端vue(前端)

    前篇已经完成后端配置并获取到api连接 https://www.cnblogs.com/ouyangkai/p/11504279.html 前端项目用的是VS code编译器完成 vue 第一步 引入 ...

  5. SQL Server温故系列(0):导航目录

    创建本系列博文通用库表及数据的 SQL 语句:下载 SQL Server温故系列(0):导航目录 SQL Server温故系列(1):SQL 数据操作 CRUD 之增删改合 SQL Server温故系 ...

  6. c# 如何获取当前方法的调用堆栈

    c# 调试程序时常常需要借助 call stack 查看调用堆栈,实际上通过code也可以获取: class Program { static void Main(string[] args) { T ...

  7. Flask补充--threading.local对象

    目录 Local 局部变量 全局变量 使用threading.local() 自定义threading.local 函数版 面向对象版 通过setattr和getattr实现 每个对象有自己的存储空间 ...

  8. Docker 容器命令大全

    容器命令: 命令 描述 attach 将本地标准输入,输出和错误流转到到正在运行的容器 build 从Dockerfile构建映像 commit 根据容器的更改创建新镜像 cp 在容器和本地文件系统之 ...

  9. php对象复制、clone、浅复制与深复制实例详解

    php对象复制.clone.浅复制与深复制实例详解 一.用clone(克隆)来复制对象$obj1 = new Object();$obj2 = clone $obj1;clone方法会触发对象里定义的 ...

  10. 「白帽挖洞技能」YxCMS 1.4.7 漏洞分析

    这几天有小伙伴留言给我们,想看一些关于后台的漏洞分析,今天i春秋选择YxCMS 1.4.7版本,理论内容结合实际案例进行深度分析,帮助大家提升挖洞技能. 注:篇幅较长,阅读用时约7分钟. YXcms是 ...