前戏

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里的配置的更多相关文章

  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. Python爬取糗事百科示例代码

    参考链接:http://python.jobbole.com/81351/#comment-93968 主要参考自伯乐在线的内容,但是该链接博客下的源码部分的正则表达式部分应该是有问题,试了好几次,没 ...

  2. 使用Docker搭建HttpRunnerManager环境

    建立一个HttpRunnerManager的环境需要Mysql,RabbitMQ服务,为简单部署,全部使用Docker 1. 在服务器建立Docker环境 2.建立Mysql容器 docker run ...

  3. kettle文件输入 通配符匹配多个文件

    写法:采用正则表达式写法,例如:.*\.txt,记得要先点“确定”在打开点“显示文件名”  有时候未保存所以显示不出来

  4. Linux和windows下修改tomcat内存

    原文地址:https://www.cnblogs.com/wdpnodecodes/p/8036333.html 由于服务器上放的tomcat太多,造成内存溢出. 常见的内存溢出有以下两种: java ...

  5. Logstash:Data转换,分析,提取,丰富及核心操作

    Logstash:Data转换,分析,提取,丰富及核心操作 Logstash plugins Logstash是一个非常容易进行扩张的框架.它可以对各种的数据进行分析处理.这依赖于目前提供的超过200 ...

  6. VOC数据集 目标检测

    最近在做与目标检测模型相关的工作,很多都要求VOC格式的数据集. PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛, P ...

  7. mongodb实现文件存储系统

    前言:这种坑很深呀,要对应mongodb的版本跟php支持的版本,然后,如果要用composer安装第三方的库,一定要一一对应的 正片开始! 开发环境: 系统:window 开发语言:php+apac ...

  8. C#: 解决Fody is only supported on MSBuild 16 and above

    背景信息: 使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,在拷贝给到别人使用 ...

  9. .NET开发框架(六)-架构设计之IIS负载均衡(视频)

    前面有关注我们公众号文章的朋友应该都知道,我们的分布式应用服务可以通过Ocelot网关进行负载均衡,这种方式属于应用级别的实现. 而今天我们给大家介绍的是平台级别的实现,并且我们首次使用视频方式进行讲 ...

  10. JAVA性能监控与调优参考文档链接

    JAVA性能监控与调优参考文档链接 jdk8工具集 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroub ...