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注册功能————————
# kingadmin.py

 

 

 

 

 

 

 

 

 

 

 

 

  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学员系统项目

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

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

Django项目:CRM(客户关系管理系统)--46--37PerfectCRM实现CRM用户注册

Django项目:CRM(客户关系管理系统)--64--54PerfectCRM实现CRM客户报名链接