# kingadmin.py
# ————————04PerfectCRM实现King_admin注册功能————————
from crm import models
#print("kingadmin crm",models.Customer) # ————————05PerfectCRM实现King_admin注册功能获取内存————————
# from king_admin.base_admin import register,BaseAdmin
from king_admin.base_admin import site,BaseAdmin
# ————————05PerfectCRM实现King_admin注册功能获取内存———————— # ————————24PerfectCRM实现King_admin自定义操作数据————————
from django.shortcuts import render
# ————————24PerfectCRM实现King_admin自定义操作数据———————— # ————————28PerfectCRM实现King_admin编辑限制————————
from django.forms import ValidationError
from django.shortcuts import render,redirect
# ————————28PerfectCRM实现King_admin编辑限制———————— #04客户信息表
class CustomerAdmin(BaseAdmin):#定制Djanago admin
# ————————54PerfectCRM实现CRM客户报名链接————————
# list_display = ('id', 'qq', 'source', 'consultant', 'content', 'date') # 显示字段表头
list_display = ('id', 'qq', 'source', 'consultant', 'content', 'date','status','enroll') # 显示字段表头
# ————————54PerfectCRM实现CRM客户报名链接————————
# ————————11PerfectCRM实现King_admin分页显示条数————————
list_per_page = 2 #分页条数 # 默认分页条数10
# ————————11PerfectCRM实现King_admin分页显示条数————————
# ————————16PerfectCRM实现King_admin日期过滤————————
# ————————15PerfectCRM实现King_admin多条件过滤————————
# 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
# list_filter = ('source','consultant','consult_courses',)
list_filter = ('date','source','consultant','consult_courses',)
# ————————15PerfectCRM实现King_admin多条件过滤————————
# ————————16PerfectCRM实现King_admin日期过滤————————
# ————————18PerfectCRM实现King_admin搜索关键字————————
#搜索(不能包含CharField)(注意加 逗号 , )
search_fields = ('name','qq',)
# ————————18PerfectCRM实现King_admin搜索关键字————————
# ————————26PerfectCRM实现King_admin自定义排序————————
ordering = '-qq' #自定义排序,默认'-id'
# ————————26PerfectCRM实现King_admin自定义排序————————
# ————————27PerfectCRM实现King_admin编辑复选框————————
filter_horizontal = ('tags',) #复选框
# ————————27PerfectCRM实现King_admin编辑复选框————————
# ————————33PerfectCRM实现King_admin编辑整张表限制————————
readonly_table=True#默认表单不锁定
# ————————33PerfectCRM实现King_admin编辑整张表限制———————— # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
colored_fields = {
'status':{'已报名':"rgba(145, 255, 0, 0.78)",
'未报名':"#ddd"},}
# ————————55PerfectCRM实现CRM客户报名状态颜色变化———————— # ————————54PerfectCRM实现CRM客户报名链接————————
def enroll(self):
'''报名'''
print("customize field enroll",self)
link_name = "报名"
if self.instance.status == 0:
link_name = "报名新课程"
return '''<a target="_blank" class="btn-link" href="/bpm/customer/%s/enrollment/">点击%s</a> ''' % (self.instance.id,link_name)
# url(r'^customer/(\d+)/enrollment/$', sales_views.enrollment, name="enrollment"), # 客户招生#报名流程一 下一步
# target属性用于表示所链接文件打开到的位置 #记住,“”内的文字只是表示一个对象的名子。
enroll.display_name = "报名链接"
# ————————54PerfectCRM实现CRM客户报名链接———————— # ————————24PerfectCRM实现King_admin自定义操作数据————————
# from django.shortcuts import render
actions = ['test_actions',]#定制功能 #测试返回到一个新页面
def test_actions(self,request,arg2):#对应的函数 #request类自己的请求 #arg2类的内容
return render(request,"king_admin/table_index.html")
test_actions.short_description = "测试显示中文"
# ————————24PerfectCRM实现King_admin自定义操作数据———————— # ————————28PerfectCRM实现King_admin编辑限制————————
# ————————31PerfectCRM实现King_admin编辑多对多限制————————
# readonly_fields = ('qq', 'consultant',) # 不可修改
readonly_fields = ('qq', 'consultant','tags',) # 不可修改
# ————————31PerfectCRM实现King_admin编辑多对多限制———————— # ————————29PerfectCRM实现King_admin编辑自定义限制————————
def default_form_validation(self,obj):
print('validation:制定的',obj.cleaned_data)
consult_course=obj.cleaned_data.get('content','')#自制验证字段
if len(consult_course)<10:
return ValidationError(#添加错误信息 返回
("该字段%(field)s 咨询内容记录不能少于10个字符"),
code='invalid',
params={'field':'content',},
)
# ————————29PerfectCRM实现King_admin编辑自定义限制———————— # ————————28PerfectCRM实现King_admin编辑限制———————— # ————————30PerfectCRM实现King_admin编辑自定义字段验证————————
def clean_name(self,obj,*args,**kwargs):#名称验证 单个
name=obj.cleaned_data['name']
if not name:
obj.add_error('name','不能为空!')
return ValidationError(#添加错误信息 返回
("%(field)s:该字段 不能为空"),
code='invalid',
params={'field':'name',},
)
elif len(name)<5:
obj.add_error('name','不能小于5个字符!')
#return ValidationError('',)
return ValidationError(#添加错误信息 返回
("%(field)s:该字段 不能小于5个字符!"),
code='invalid',
params={'field':'name',},
)
# ————————30PerfectCRM实现King_admin编辑自定义字段验证———————— # ————————34PerfectCRM实现CRM自定义用户————————
#10账号表
class UserProfileAdmin(BaseAdmin):#定制Djanago admin
list_display = ('id', 'email', 'name') # 显示字段表头 # ————————36PerfectCRM实现King_admin密码修改————————
readonly_fields = ('password',) # 不可修改,限制
filter_horizontal = ('user_permissions','groups') #复选框
modelform_exclude_fields=['last_login']#排除#不显示 #自增日期 #base_admin.py #forms.py
# ————————36PerfectCRM实现King_admin密码修改———————— site.register(models.UserProfile, UserProfileAdmin)
# ————————34PerfectCRM实现CRM自定义用户———————— # ————————05PerfectCRM实现King_admin注册功能获取内存————————
# register(models.Customer,CustomerAdmin)
# register(models.CourseRecord)
site.register(models.Customer,CustomerAdmin)
# ————————58PerfectCRM实现king_admin批量生成上课记录————————
# site.register(models.CourseRecord)
# ————————58PerfectCRM实现king_admin批量生成上课记录————————
# ————————05PerfectCRM实现King_admin注册功能获取内存———————— # ————————04PerfectCRM实现King_admin注册功能———————— # ————————56PerfectCRM实现CRM客户报名缴费链接————————
# 06学员报名信息表
class EnrollmentAdmin(BaseAdmin): # 定制Djanago admin
list_display = ('id', 'customer', 'enrolled_class', 'consultant', 'Pay_cost', 'date', 'payment') # 显示字段表头 # ————————58PerfectCRM实现king_admin批量生成上课记录————————
list_filter = ('enrolled_class','consultant', 'Pay_cost',) # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
# ————————58PerfectCRM实现king_admin批量生成上课记录———————— colored_fields = {
'Pay_cost': {True: "rgba(145, 255, 0, 0.78)",
False: "#ddd"}, }
def payment(self):
link_name = "增加缴费"
if self.instance.Pay_cost == False:
link_name = "缴费"
return '''<a target="_blank" class="btn-link" href="/bpm/payment/%s/" >点击%s</a> ''' % (self.instance.id, link_name)
# url(r'^payment/(\d+)/$', financial_views.payment, name="payment"), # 报名流程四 缴费 #财务
# target属性用于表示所链接文件打开到的位置 #记住,“”内的文字只是表示一个对象的名子。
payment.display_name = "缴费链接"
site.register(models.Enrollment, EnrollmentAdmin) # 06学员报名信息表
# ————————56PerfectCRM实现CRM客户报名缴费链接———————— # ————————58PerfectCRM实现king_admin批量生成上课记录————————
# 07缴费记录表
class PaymentAdmin(BaseAdmin):
list_display = ['id', 'customer', 'course', 'amount', 'consultant','date'] # 显示字段表头
list_filter = ('customer', 'course', 'consultant',) # 过滤器(可以包含ManyToManyField) (注意加 逗号 , ) from django.shortcuts import render, HttpResponse, redirect
# 08每节课上课纪录表
class CourseRecordAdmin(BaseAdmin):
list_display = ['id', 'from_class', 'day_num', 'teacher', 'has_homework', 'homework_title', 'homework_content','outline', 'date'] # 显示字段表头
list_filter = ('from_class', 'teacher', 'date') # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
def initialize_studyrecords(self, request, queryset): # 制定功能
print('initialize_studyrecords', self, request, queryset)
if len(queryset) > 1:
return HttpResponse("同时只能选择一个班级!")
print('获取对应的学员', queryset[0].from_class.enrollment_set.all()) # _set反向查询
new_obj_list = [] # 用于批量创建事务 #防止数据库事物回滚
for enrll_obj in queryset[0].from_class.enrollment_set.all(): # 创建学习记录
# models.StudyRecord.objects.get_or_create( #get_or_ #防止报错
# student=enrll_obj,#对应学员
# course_record=queryset[0],
# attendance=0,#签到状态,默认签到,
# score=0,#成绩)
# 防止数据库事物回滚 #"""09学习纪录"""
new_obj_list.append(models.StudyRecord(
student=enrll_obj, # 对应学员
course_record=queryset[0], # 班级#节课
attendance=0, # 签到状态,默认签到,
score=0, # 成绩
))
try:
course_record_id_list= models.StudyRecord.objects.values_list('course_record_id')#每节课上课纪录表ID列表
queryset_id=(int(queryset[0].id),)#数字转元组
if queryset_id not in course_record_id_list: #列表是元组
models.StudyRecord.objects.bulk_create(new_obj_list) # bulk_create批量创建数据库事物 #统一最后保存
print('批量创建成功!')
except Exception as e:
return HttpResponse('批量创建失败,本节课可能有相应的上课记录') return redirect("/king_admin/crm/studyrecord/?course_record=%s" % queryset[0].id) # 学习记录 #加上过滤 actions = ['initialize_studyrecords', ]
initialize_studyrecords.short_description = "创建班级本节上课记录" # 显示别名 # 09学习纪录
class StudyRecordAdmin(BaseAdmin):
list_display = ['id', 'student', 'course_record', 'attendance', 'score', 'date'] # 显示字段表头 list_filter = ['course_record', 'attendance', 'score', 'student'] # 过滤器(可以包含ManyToManyField) (注意加 逗号 , ) list_editable = ['score', 'attendance'] # 可编辑 #用于上课点名 批改成绩 site.register(models.Payment, PaymentAdmin) # 07缴费记录表
site.register(models.CourseRecord, CourseRecordAdmin) # 08每节课上课纪录表
site.register(models.StudyRecord, StudyRecordAdmin) # 09学习纪录
# ————————58PerfectCRM实现king_admin批量生成上课记录————————

# kingadmin.py

Django项目:CRM(客户关系管理系统)--68--58PerfectCRM实现king_admin批量生成上课记录的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  2. Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  3. Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  4. Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  5. Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  6. Django项目:CRM(客户关系管理系统)--73--63PerfectCRM实现CRM讲师下载作业

    # teacher_urls.py # ————————62PerfectCRM实现CRM讲师讲课记录———————— from django.conf.urls import url from bp ...

  7. Django项目:CRM(客户关系管理系统)--71--61PerfectCRM实现CRM学生上传作业

    # student_urls.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.conf.urls import url from bp ...

  8. Django项目:CRM(客户关系管理系统)--67--57PerfectCRM实现admin批量生成上课记录

    #admin.py # ————————01PerfectCRM基本配置ADMIN———————— from django.contrib import admin # Register your m ...

  9. Django CRM客户关系管理系统

    CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...

随机推荐

  1. MFC int转CString

    方法一. int iVar = 7489; char szBuf[100]; _itoa(iVar, szBuf, 10); CString ss(szBuf); SetDlgItemText(IDC ...

  2. 全局CSS设置

    全局CSS设置 1.清除所有的标记的内外边距 body,ul,li,a,img,p,input{ margin:0; padding:0; } 2.去除项目符号或编号前面的符号 ul,ol,li{ l ...

  3. CCPC 2019 网络赛 1002 array (权值线段树)

    HDU 6703 array   题意:   给定一个数组 \(a_1,a_2, a_3,...a_n\) ,满足 \(1 \le a[i]\le n\) 且 \(a[i]\) 互不相同.   有两种 ...

  4. selenium基础(参数化脚本)

    参数化脚本 什么是参数化 参数化就是用包含多组数据的参数列表,使之替换脚本中的响应常量值,这样,在脚本运行的时候,就会使用参数表中的数据来代替脚本中的常量值 由于参数表中包含了多组数据,所以执行用例时 ...

  5. 13-5-let和()的作用域

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 2019-8-31-C#-如何给-ValueTuple-返回值添加注释

    title author date CreateTime categories C# 如何给 ValueTuple 返回值添加注释 lindexi 2019-08-31 16:55:58 +0800 ...

  7. Nand Flash 控制器中的硬件 ECC 介绍

    ECC 产生方法 ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件 ECC 和软件 ECC 算法两种,在 S3C2410 的 Nand Flash 控制器中实现了由硬件电路(ECC 生 ...

  8. 小程序swiper-item内容过多显示不全的解决方案

    最近在项目遇到swiper高度不能自适应,导致swiper-item 里面的内容过多时只能显示一部分,最终解决方案:<swiper current="{{currentTab}}&qu ...

  9. web.xml中多个Servlet执行顺序的问题!

    1.两个servlet或者两个servlet-mapping,其中的servlet-name名称不能存在相同. 2.所有的servlet-mapping标签下,url-pattern中包含的文本不能相 ...

  10. nodejs vue-cli 微信公众号开发(一) 申请域名搭建服务器

    一.搭建本地服务器 1.首先保存本地的80端口被node监听,利用内网穿透工具把80端口映射出去.(ngrok工具可以穿透内网使本地ip作为外网使用) 2.打开https://natapp.cn/tu ...