10.22crm
2018-10-23 08:28:41
由于昨晚上断网,所以今天早上补更一下
越努力,越幸运!永远不要高估自己!
crm老师就讲三四天,还有明后两天!
主要是讲一些基本使用,自定义配置陪一些东西!
主要还是配置类
crm/stark.py
from stark.service.stark import site, ModelStark
from django.utils.safestring import mark_safe
from django.conf.urls import url
from django.shortcuts import redirect, render
from .models import * """
可以配置字段:
1. list_display[] 可以添加自定义展示字段,也可以添加函数名
2. 父类提供的添加该表额外url的接口 def extra_url 重写这个方法即可
2018-10-22 21:33:33
增加部分:
1. 初始化 course_record,studyrecord,
2. 考勤
3. 录入成绩
""" # 用户配置表
class UserConfig(ModelStark):
# 自定义展示字段 list_display[]
list_display = ["name", "email", "depart"] # 班级配置表
class ClassConfig(ModelStark):
# 自定义一个展示函数,然后添加到list_display中
def display_classname(self, obj=None, header=False):
if header:
return "班级名称"
class_name = "%s(%s)" % (obj.course.name, str(obj.semester))
return class_name list_display = [display_classname, "tutor", "teachers"] # 客户配置表
class CusotmerConfig(ModelStark):
# 自定义展示性别和课程
def display_gender(self, obj=None, header=False):
if header:
return "性别"
return obj.get_gender_display() def display_course(self, obj=None, header=False):
if header:
return "咨询课程"
temp = []
for course in obj.course.all():
s = "<a href='/stark/crm/customer/cancel_course/%s/%s' style='border:1px solid #369;padding:3px 6px'><span>%s</span></a> " % (
obj.pk, course.pk, course.name,)
temp.append(s)
return mark_safe("".join(temp)) list_display = ["name", display_gender, display_course, "consultant", ] def cancel_course(self, request, customer_id, course_id):
print(customer_id, course_id)
obj = Customer.objects.filter(pk=customer_id).first()
obj.course.remove(course_id)
return redirect(self.get_list_url()) # 父类给出的添加额外url的接口
def extra_url(self):
temp = []
temp.append(url(r"cancel_course/(\d+)/(\d+)", self.cancel_course))
return temp # 咨询配置表
class ConsultConfig(ModelStark):
# 自定义展示字段
list_display = ["customer", "consultant", "date", "note"] # 学生配置表
class StudentConfig(ModelStark):
# 自定义展示字段
list_display = ["customer", "class_list"]
list_display_links = ["customer"] # 学习情况配置表
class StudyConfig(ModelStark):
# 自定义展示字段
list_display = ["student", "course_record", "record", "score"] def patch_late(self, request, queryset):
queryset.update(record="late") # 批量更改为 迟到
patch_late.short_description = "一键迟到"
actions = [patch_late] # 课程信息配置表
class CourseRecordConfig(ModelStark):
# 记录成绩的视图函数
def score(self, request, course_record_id):
if request.method == "POST":
print(request.POST)
data = {}
for key, value in request.POST.items():
if key == "csrfmiddlewaretoken": continue
print("key:", key) # key: score_1
# 取到键值pk 后面数字
field, pk = key.rsplit("_", 1)
if pk in data:
data[pk][field] = value
else:
data[pk] = {field: value} # data {4:{"score":90}}
print("data", data)
# 构建成如下的数据 虽然构建数据有些麻烦,但是节省了储存数据库所需时间
# data {'1': {'score': '100', 'homework_note': '11'}, '2': {'score': '85', 'homework_note': '22'}}
for pk, update_data in data.items():
StudyRecord.objects.filter(pk=pk).update(**update_data)
return redirect(request.path)
else:
# 把数据传入前端,然后渲染列表数据
study_record_list = StudyRecord.objects.filter(course_record=course_record_id)
score_choices = StudyRecord.score_choices
return render(request, "score.html", locals()) # 通过内置接口 分发一个记录成绩的url
def extra_url(self):
temp = []
temp.append(url(r"record_score/(\d+)", self.score))
return temp # 定义考勤的函数
def record(self, obj=None, header=False):
if header:
return "考勤"
return mark_safe("<a href='/stark/crm/studyrecord/?course_record=%s'>记录</a>" % obj.pk) # 定义录入成绩的函数
def record_score(self, obj=None, header=False):
if header:
return "录入成绩"
return mark_safe("<a href='record_score/%s'>录入成绩</a>" % obj.pk) list_display = ["class_obj", "day_num", "teacher", record, record_score] # 批量添加学生学习记录
def patch_studyrecord(self, request, queryset):
print(queryset)
temp = []
for course_record in queryset:
# 与course_record关联的班级对应所有学生
student_list = Student.objects.filter(class_list__id=course_record.class_obj.pk)
for student in student_list:
obj = StudyRecord(student=student, course_record=course_record)
temp.append(obj)
# 在StudyRecord表中批量添加学生学习记录
StudyRecord.objects.bulk_create(temp)
patch_studyrecord.short_description = "批量生成学习记录"
actions = [patch_studyrecord, ] site.register(UserInfo, UserConfig)
site.register(Customer, CusotmerConfig)
site.register(Student, StudentConfig)
site.register(ConsultRecord, ConsultConfig)
site.register(StudyRecord, StudyConfig)
site.register(CourseRecord, CourseRecordConfig)
site.register(ClassList, ClassConfig)
site.register(School)
site.register(Department)
site.register(Course)
test.py 知识点
# 加个r从右向左分, 取到r是从左向右分
print("yuan_alex_egon".rsplit("_",2))
print("yuan_alex_egon".split("_",2))
放上笔记!
day94:
知识点1:
limit_choice_to={}
ModelForm
model:
teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo',related_name="abc",limit_choices_to={"depart__in":[1002,1005]})
form:
data=UserInfo.objects.filter(depart__in=[1002,1005]).valueslist("pk","title")
teachers = forms.ModelMultiChoiceField(choices=data)
知识点2:
if
class Customer():
name=models.Charfield(max...)
gender = models.IntegerField(verbose_name='性别', choices=[(1,"男"),(2,"女")])
obj=Customer.objects.create(name="alex",gender=1)
print(obj.gender)
print(obj.get_gender_display()) # "男"
知识点3:
扩展URL:
temp.extend(self.extra_url())
def cancel_course(self,request,customer_id,course_id):
print(customer_id,course_id)
obj=Customer.objects.filter(pk=customer_id).first()
obj.course.remove(course_id)
return redirect(self.get_list_url())
def extra_url(self):
temp=[]
temp.append(url(r"cancel_course/(\d+)/(\d+)",self.cancel_course))
return temp
crm:
讲师与学生
1 初始化 course_record,studyrecord,
2 考勤
3 录入成绩
4 显示成绩 ajax 查询
销售与客户
10.22crm的更多相关文章
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
- ArcGIS 10.0紧凑型切片读写方法
首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...
- CI Weekly #10 | 2017 DevOps 趋势预测
2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...
- 10个最好用的HTML/CSS 工具、插件和资料库
大家在使用HTML/CSS开发项目的过程中,有使用过哪些工具,插件和库?下面介绍的10种HTML/CSS工具,插件和资料库,是国外程序员经常用到的. Firebug Lite FirebugLite ...
- 【Win 10 应用开发】启动远程设备上的应用
这个功能必须在“红石-1”(build 14393)以上的系统版中才能使用,运行在一台设备上的应用,可以通过URI来启动另一台设备上的应用.激活远程应用需要以下前提: 系统必须是build 14393 ...
- 在Ubuntu 16.10安装mysql workbench报未安装软件包 libpng12-0错误
1.安装mysql workbench,提示未安装软件包 libpng12-0 下载了MySQL Workbench 6.3.8 在安装的时候报错: -1ubu1604-amd64.deb 提示: ...
- Ubuntu 16.10 安装byzanz截取动态效果图工具
1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...
- Ubuntu 16.10 安装KolourPaint 4画图工具
KolourPaint 4画图工具简单实用,可以绘画.视频处理和图标编辑: • 绘画:绘制图表和“手绘” • 视频处理:编辑截图和照片;应用特效 • 图标编辑:绘画剪贴和标识透明化 1.在Ubuntu ...
随机推荐
- boost.xml_parser中文字符问题 (转)
当使用xml_parser进行读xml时,如果遇到中文字符会出现解析错误. 网上有解决方案说使用wptree来实现,但当使用wptree来写xml时也会出错.而使用ptree来写中文时不会出错. 综合 ...
- PL/SQL学习笔记之游标
一:游标 Oracle会创建一个上下文区域,用于处理SQL语句,其中包含需要处理的语句.处理结果等等. 游标指向这一上下文的区域. PL/SQL通过控制游标在上下文区域移动,来获取SQL语句的结果信息 ...
- PPTP 在Centos 7.1 建立方法与失效处理
# yum install pptp pptp-setup pptpsetup --create vpn --server (serverName) --username (Username) - ...
- TCMalloc小记(转)
一. 原理 tcmalloc就是一个内存分配器,管理堆内存,主要影响malloc和free,用于降低频繁分配.释放内存造成的性能损耗,并且有效地控制内存碎片.glibc中的内存分配器是ptmalloc ...
- (原)CNN中的卷积、1x1卷积及在pytorch中的验证
转载请注明处处: http://www.cnblogs.com/darkknightzh/p/9017854.html 参考网址: https://pytorch.org/docs/stable/nn ...
- Linux系统如何将某一程序设置为开机自启动
文章来源:百度知道. Linux开机启动程序详解 我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍L ...
- django --- DetailView源码分析
[背景] 最近在看django官方文档的class-based-views这一节的时候一直不得要领,感觉自己清楚,但是回想起来又没有脉络:于是没有办法只 能是“暗中观察”django的源码了. 刚打开 ...
- JPA+Hibernate 3.3 ——第一个JPA程序
所需要的最小的jar包(注意:jar包所在路径不能含有空格或中文) hibernate3.jarhibernate-cglib-repack-2.1_3.jarslf4j-api-1.5.2.jarj ...
- 《软件测试自动化之道》读书笔记 之 SQL 存储过程测试
<软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序 创建测试用例以及测试结果存储 执行T-SQL脚本 使用BCP工具导入测试用例数据 ...
- ssh-remote-port-forwarding
1.ssh免密码登录(A登录到B) 1.1.在A上执行并在~/.ssh下生成id_rsa和id_rsa.pub两个文件 ssh-keygen -t rsa -P '' 1.2.拷贝id_rsa.pub ...