Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接
Posted 颜言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接相关的知识,希望对你有一定的参考价值。
1 # kingadmin.py 2 # ————————04PerfectCRM实现King_admin注册功能———————— 3 from crm import models 4 #print("kingadmin crm",models.Customer) 5 6 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 7 # from king_admin.base_admin import register,BaseAdmin 8 from king_admin.base_admin import site,BaseAdmin 9 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 10 11 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 12 from django.shortcuts import render 13 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 14 15 # ————————28PerfectCRM实现King_admin编辑限制———————— 16 from django.forms import ValidationError 17 from django.shortcuts import render,redirect 18 # ————————28PerfectCRM实现King_admin编辑限制———————— 19 20 #04客户信息表 21 class CustomerAdmin(BaseAdmin):#定制Djanago admin 22 # ————————54PerfectCRM实现CRM客户报名链接———————— 23 # list_display = (\'id\', \'qq\', \'source\', \'consultant\', \'content\', \'date\') # 显示字段表头 24 list_display = (\'id\', \'qq\', \'source\', \'consultant\', \'content\', \'date\',\'status\',\'enroll\') # 显示字段表头 25 # ————————54PerfectCRM实现CRM客户报名链接———————— 26 # ————————11PerfectCRM实现King_admin分页显示条数———————— 27 list_per_page = 2 #分页条数 # 默认分页条数10 28 # ————————11PerfectCRM实现King_admin分页显示条数———————— 29 # ————————16PerfectCRM实现King_admin日期过滤———————— 30 # ————————15PerfectCRM实现King_admin多条件过滤———————— 31 # 过滤器(可以包含ManyToManyField) (注意加 逗号 , ) 32 # list_filter = (\'source\',\'consultant\',\'consult_courses\',) 33 list_filter = (\'date\',\'source\',\'consultant\',\'consult_courses\',) 34 # ————————15PerfectCRM实现King_admin多条件过滤———————— 35 # ————————16PerfectCRM实现King_admin日期过滤———————— 36 # ————————18PerfectCRM实现King_admin搜索关键字———————— 37 #搜索(不能包含CharField)(注意加 逗号 , ) 38 search_fields = (\'name\',\'qq\',) 39 # ————————18PerfectCRM实现King_admin搜索关键字———————— 40 # ————————26PerfectCRM实现King_admin自定义排序———————— 41 ordering = \'-qq\' #自定义排序,默认\'-id\' 42 # ————————26PerfectCRM实现King_admin自定义排序———————— 43 # ————————27PerfectCRM实现King_admin编辑复选框———————— 44 filter_horizontal = (\'tags\',) #复选框 45 # ————————27PerfectCRM实现King_admin编辑复选框———————— 46 # ————————33PerfectCRM实现King_admin编辑整张表限制———————— 47 readonly_table=True#默认表单不锁定 48 # ————————33PerfectCRM实现King_admin编辑整张表限制———————— 49 50 # ————————54PerfectCRM实现CRM客户报名链接———————— 51 def enroll(self): 52 \'\'\'报名\'\'\' 53 print("customize field enroll",self) 54 link_name = "报名" 55 if self.instance.status == 0: 56 link_name = "报名新课程" 57 return \'\'\'<a target="_blank" class="btn-link" href="/bpm/customer/%s/enrollment/">点击%s</a> \'\'\' % (self.instance.id,link_name) 58 # url(r\'^customer/(\\d+)/enrollment/$\', sales_views.enrollment, name="enrollment"), # 客户招生#报名流程一 下一步 59 # target属性用于表示所链接文件打开到的位置 #记住,“”内的文字只是表示一个对象的名子。 60 enroll.display_name = "报名链接" 61 # ————————54PerfectCRM实现CRM客户报名链接———————— 62 63 64 65 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 66 # from django.shortcuts import render 67 actions = [\'test_actions\',]#定制功能 #测试返回到一个新页面 68 def test_actions(self,request,arg2):#对应的函数 #request类自己的请求 #arg2类的内容 69 return render(request,"king_admin/table_index.html") 70 test_actions.short_description = "测试显示中文" 71 # ————————24PerfectCRM实现King_admin自定义操作数据———————— 72 73 # ————————28PerfectCRM实现King_admin编辑限制———————— 74 # ————————31PerfectCRM实现King_admin编辑多对多限制———————— 75 # readonly_fields = (\'qq\', \'consultant\',) # 不可修改 76 readonly_fields = (\'qq\', \'consultant\',\'tags\',) # 不可修改 77 # ————————31PerfectCRM实现King_admin编辑多对多限制———————— 78 79 # ————————29PerfectCRM实现King_admin编辑自定义限制———————— 80 def default_form_validation(self,obj): 81 print(\'validation:制定的\',obj.cleaned_data) 82 consult_course=obj.cleaned_data.get(\'content\',\'\')#自制验证字段 83 if len(consult_course)<10: 84 return ValidationError(#添加错误信息 返回 85 ("该字段%(field)s 咨询内容记录不能少于10个字符"), 86 code=\'invalid\', 87 params={\'field\':\'content\',}, 88 ) 89 # ————————29PerfectCRM实现King_admin编辑自定义限制———————— 90 91 # ————————28PerfectCRM实现King_admin编辑限制———————— 92 93 # ————————30PerfectCRM实现King_admin编辑自定义字段验证———————— 94 def clean_name(self,obj,*args,**kwargs):#名称验证 单个 95 name=obj.cleaned_data[\'name\'] 96 if not name: 97 obj.add_error(\'name\',\'不能为空!\') 98 return ValidationError(#添加错误信息 返回 99 ("%(field)s:该字段 不能为空"), 100 code=\'invalid\', 101 params={\'field\':\'name\',}, 102 ) 103 elif len(name)<5: 104 obj.add_error(\'name\',\'不能小于5个字符!\') 105 #return ValidationError(\'\',) 106 return ValidationError(#添加错误信息 返回 107 ("%(field)s:该字段 不能小于5个字符!"), 108 code=\'invalid\', 109 params={\'field\':\'name\',}, 110 ) 111 # ————————30PerfectCRM实现King_admin编辑自定义字段验证———————— 112 113 # ————————34PerfectCRM实现CRM自定义用户———————— 114 #10账号表 115 class UserProfileAdmin(BaseAdmin):#定制Djanago admin 116 list_display = (\'id\', \'email\', \'name\') # 显示字段表头 117 118 # ————————36PerfectCRM实现King_admin密码修改———————— 119 readonly_fields = (\'password\',) # 不可修改,限制 120 filter_horizontal = (\'user_permissions\',\'groups\') #复选框 121 modelform_exclude_fields=[\'last_login\']#排除#不显示 #自增日期 #base_admin.py #forms.py 122 # ————————36PerfectCRM实现King_admin密码修改———————— 123 124 site.register(models.UserProfile, UserProfileAdmin) 125 # ————————34PerfectCRM实现CRM自定义用户———————— 126 127 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 128 # register(models.Customer,CustomerAdmin) 129 # register(models.CourseRecord) 130 site.register(models.Customer,CustomerAdmin) 131 site.register(models.CourseRecord) 132 # ————————05PerfectCRM实现King_admin注册功能获取内存———————— 133 134 # ————————04PerfectCRM实现King_admin注册功能————————
1 #kingadmin_tags.py 2 3 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 4 5 # # 因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。 6 # from django import template #模板 7 # register = template.Library() #模板库 8 # 9 # @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法 10 # def get_app_name(model_obj): 11 # 12 # # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 13 # # return model_obj._meta.verbose_name_plural 14 # \'\'\' 15 # #判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文) 16 # class Meta: 17 # verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s 18 # verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s 19 # \'\'\' 20 # model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural 21 # if not model_name: 22 # model_name = model_obj._meta.model_name 23 # 24 # return model_name 25 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 26 27 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理———————— 28 29 # ————————07PerfectCRM实现King_admin显示注册的表———————— 30 #因为前端禁止使用下划线开头(_meta.verbose_name ),所以通过后端处理后返回前端。 31 from django import template #模板 32 register = template.Library() #模板库 33 34 35 36 @register.simple_tag #Django中利用filter与simple_tag为前端自定义函数的实现方法 37 def get_model_verbose_name(model_obj): 38 \'\'\' 39 #判断 数据库 里如果有 verbose_name 或者 verbose_name_plural 就 调用 如果都没有 就使用默认的(英文) 40 class Meta: 41 verbose_name = "04客户信息表" #在 Django Admin 里 表名显示中文 但是会加s 42 verbose_name_plural = "04客户信息表" #在 Django Admin 里 表名显示中文 不会加s 43 \'\'\' 44 model_name = model_obj._meta.verbose_name_plural if model_obj._meta.verbose_name else model_obj._meta.verbose_name_plural 45 if not model_name: 46 model_name = model_obj._meta.model_name 47 return model_name 48 49 @register.simple_tag 50 def get_model_name(model_obj): 51 return model_obj._meta.model_name 52 @register.simple_tag 53 def get_app_name(model_obj): 54 return model_obj._meta.app_label 55 # ————————07PerfectCRM实现King_admin显示注册的表———————— 56 57 58 # # ————————09PerfectCRM实现King_admin显示注册表的内容———————— 59 # from django.utils.safestring import mark_safe #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 60 # @register.simple_tag 61 # def build_table_row(admin_obj,obj):#通过kingadmin_tags在后台处理 再传到前端 62 # row_ele = "" #为了生成一整行返回前端 63 # if admin_obj.list_display:#如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin) 64 # 65 # # ————————19PerfectCRM实现King_admin数据修改———————— 66 # #循环所有 要显示 的字符串 进行反射 展示 字段 67 # # for column in admin_obj.list_display: #循环base_admin里class BaseAdmin下list_display = () 68 # for index, column in enumerate(admin_obj.list_display): # 转为列表取 下标 , 字段名 69 # # ————————19PerfectCRM实现King_admin数据修改———————— 70 # 71 # column_obj = obj._meta.get_field(column)#遍历获取 传进的参数对象 72 # if column_obj.choices:#判断如果字段有choices属性 73 # #获取choices的字符串(外健) 74 # get_column_data = getattr(obj,"get_%s_display" % column) #反射,传进的参数对象,拼接字段 75 # column_data = get_column_data()#函数,拿到数据 76 # else: 77 # column_data = getattr(obj, column)#反射, 78 # # ————————10PerfectCRM实现King_admin日期优化———————— 79 # if type(column_data).__name__ == \'datetime\': 80 # column_data = column_data.strftime(\'%Y-%m-%d %H-%M-%S\') 81 # # ————————10PerfectCRM实现King_admin日期优化———————— 82 # 83 # # ————————19PerfectCRM实现King_admin数据修改———————— 84 # 85 # if index == 0: #首列 86 # # 生成一个链接 跳转到编辑页面 #Format参数是一个格式字符串(%s升级版) 87 # td_ele = \'\'\'<td><a href="/king_admin/{app_name}/{model_name}/{obj_id}/change/">{column_data}</a> </td>\'\'\'\\ 88 # .format(app_name=admin_obj.model._meta.app_label, 89 # model_name=admin_obj.model._meta.model_name, 90 # obj_id=obj.id, 91 # column_data=column_data) 92 # else: 93 # td_ele = \'\'\'<td>%s</td>\'\'\' % column_data 94 # # td_ele = \'\'\'<td>%s</td>\'\'\' % column_data #把反射来的值 拼接字符串 生成<td> 95 # # ————————19PerfectCRM实现King_admin数据修改———————— 96 # row_ele += td_ele #把 <td> 拼接到上面到空字符串 97 # else: 98 # row_ele +="<td>%s</td>" %obj #把<td>拼接到上面到空字符串,crm/models.py里 def __str__(self):的返回值 99 # return mark_safe(row_ele) #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 100 # # ————————09PerfectCRM实现King_admin显示注册表的内容———————— 101 102 103 # ————————54PerfectCRM实现CRM客户报名链接———————— 104 from django.utils.safestring import mark_safe #使用mark_safe函数标记后,django将不再对该函数的内容进行转义 105 from django.core.exceptions import FieldDoesNotExist 106 @register.simple_tag 107 def build_table_row(admin_obj,obj):#通过kingadmin_tags在后台处理 再传到前端 108 row_ele = "" #为了生成一整行返回前端 109 # ————————54PerfectCRM实现CRM客户报名链接———————— 110 column_not=[]#表示不是表中字段列表 111 # ————————54PerfectCRM实现CRM客户报名链接———————— 112 113 if admin_obj.list_display:#如果不为空,有在crm/kingadmin.py注册site.register(models.Customer,CustomerAdmin) 114 # ————————19PerfectCRM实现King_admin数据修改———————— 115 #循环所有 要显示 的字符串 进行反射 展示 字段 116 # for column in admin_obj.list_display: #循环base_admin里class BaseAdmin下list_display = () 117 for index, column in enumerate(admin_obj.list_display): # 转为列表取 下标 , 字段名 118 # ————————19PerfectCRM实现King_admin数据修改———————— 119 # ————————54PerfectCRM实现CRM客户报名链接———————— 120 try: #获取表中的字段 121 # ————————54PerfectCRM实现CRM客户报名链接———————— 122 column_obj = obj._meta.get_field(column)#遍历获取 传进的参数对象 123 if column_obj.choices:#判断如果字段有choices属性 124 #获取choices的字符串(外健) 125 get_column_data = getattr(obj,"get_%s_display" % column) #反射,传进的参数对象,拼接字段 126 column_data = get_column_data()#函数,拿到数据 127 else: 128 column_data = getattr(obj, column)#反射, 129 # ————————10PerfectCRM实现King_admin日期优化———————— 130 if type(column_data).__name__ == \'datetime\': 131 column_data = column_data.strftime(\'%Y-%m-%d %H-%M-%S\') 132 # ————————10PerfectCRM实现King_admin日期优化———————— 133 134 # ————————19PerfectCRM实现King_admin数据修改———————— 135 if index == 0: #首列 136 # 生成一个链接 跳转到编辑页面 #Format参数是一个格式字符串(%s升级版) 137 td_ele = \'\'\'<td><a href="/king_admin/{app_name}/{model_name}/{obj_id}/change/">{column_data}</a> </td>\'\'\'\\ 138 .format(app_name=admin_obj.model._meta.app_label, 139 model_name=admin_obj.model._meta.model_name, 140 obj_id=obj.id, 141 column_data=column_data) 142 else: 143 td_ele = \'\'\'<td>%s</td>\'\'\' % column_data 144 # td_ele = \'\'\'<td>%s</td>\'\'\' % column_data #把反射来的值 拼接字符串 生成<td> 145 # ————————19PerfectCRM实现King_admin数据修改———————— 146 # ————————54PerfectCRM实现CRM客户报名链接———————— 147 except FieldDoesNotExist as e: # 如果没有获取到 148 if hasattr(admin以上是关于Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接的主要内容,如果未能解决你的问题,请参考以下文章
Django项目:CRM(客户关系管理系统)--66--56PerfectCRM实现CRM客户首列进入更改页优化路径
Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录
Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录