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的路由控制会简单很多,它的本质就 ...
随机推荐
- Linux 网络通信 API详解【转载】
TCP/IP分层模型 OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的, 它分为7个层次:应用层.表示层.会话层.传输层.网络层.数据链路层及物理层. 这个7层的协议模型虽然规定得 ...
- 06Shell并发控制
并发控制 文件描述 文件句柄 File Descriptors (FD,文件描述符)或 文件句柄: 进程使用文件描述符来管理打开的文件 注意 1.如何通过exec打开一个文件 exec 数字<& ...
- 阿里云 .NET SDK Roa 和 Rpc 风格签名
阿里云 .NET SDK Roa 和 Rpc 风格的签名 Demo,适用于自己不想用其提供的SDK,想用自己组装 Roa 和 Rpc 的签名方式. Roa 和 Rpc 的签名方式主要有以下几个不同点: ...
- spring的@primary和@qualifier注解解决一个接口多个实现的注入问题
Spring中提供了@Primary和@Qualifier注解来解决一个接口多个实现的注入问题. @Primary注解 Spring中有提供一个@Primary注解,具体的作用是在一个接口有多个实现类 ...
- MicroPython:基于TPYBoard集合MAX7219点阵模块制作表白女神神器
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言 又是一年毕业季,只有到了毕业季才会意识到自己又 ...
- centos6 cgroup及cgred简介和简单使用
一.cgroup简介 Linux CGroup全称Linux Control Group, 是Linux内核的一个功能,用来限制,控制与分离一个进程组群的资源(如CPU.内存.磁盘输入输出等).这个项 ...
- WPF-介绍一款能够自动格式化XAML界面代码的的插件
因为之前有小伙伴问格式化XAMl的快捷键按钮,所以在这里分享一款格式化XAMl的插件,非常好用. 直接在工具-->扩展和更新里搜索XamlStyler下载安装即可. 安装后按CTRL+S保存后就 ...
- 深入浅出JVM的锁优化案例
锁优化 适应性自旋(Adaptive Spinning) 线程阻塞的时候,让等待的线程不放弃cpu执行时间,而是执行一个自旋(一般是空循环),这叫做自旋锁. 自旋等待本身虽然避免了线程切换的开销,但它 ...
- 最新版windows安装支持输入shell命令的工具cygwin教程
首先去官网下载自己对应系统32位或64位系统版本安装包:https://cygwin.com/install.html 下载好后按提示一步一步安装,直到这一步: 初次安装,这里是空的,没有下载的镜像链 ...
- 微信小程序滚动tab的实现
微信小程序滚动tab的实现 1.目的:为了解决滚动版本的tab,以及实现虹吸效果. 2.方案:自己动手写了一个Demo,用于测试实现如上的效果.其代码有做参考,在这里先声明.具体的参照如下:重庆大学二 ...