
![]()
1 #base_admin.py
2
3
4 # ————————24PerfectCRM实现King_admin自定义操作数据————————
5 from django.shortcuts import render,redirect
6 # ————————24PerfectCRM实现King_admin自定义操作数据————————
7
8 # ————————04PerfectCRM实现King_admin注册功能————————
9
10 #Django admin 注册功能的形式
11 # sites = {
12 # 'crm':{
13 # 'customers':CustomerAdmin,
14 # 'customerfollowup':CustomerFollowUPAdmin,
15 # }
16 # }
17
18 class AdminRegisterException(Exception): #自定义异常
19 def __init__(self,msg):
20 self.message = msg
21
22 class BaseAdmin(object):#自定义方法
23 list_display = () #显示的字段(不能包含ManyToManyField)
24
25 # ————————11PerfectCRM实现King_admin分页显示条数————————
26 list_per_page = 10 # 默认分页条数10
27 # ————————11PerfectCRM实现King_admin分页显示条数————————
28
29 # ————————15PerfectCRM实现King_admin多条件过滤————————
30 list_filter = () # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
31 # ————————15PerfectCRM实现King_admin多条件过滤————————
32
33 # ————————18PerfectCRM实现King_admin搜索关键字————————
34 search_fields = () #搜索(不能包含CharField)(注意加 逗号 , )
35 # ————————18PerfectCRM实现King_admin搜索关键字————————
36
37 # ————————26PerfectCRM实现King_admin自定义排序————————
38 ordering = None #自定义排序
39 # ————————26PerfectCRM实现King_admin自定义排序————————
40
41 # ————————27PerfectCRM实现King_admin编辑复选框————————
42 filter_horizontal = []#复选框
43 # ————————27PerfectCRM实现King_admin编辑复选框————————
44
45 # ————————33PerfectCRM实现King_admin编辑整张表限制————————
46 readonly_table=False#默认表单不锁定
47 # ————————33PerfectCRM实现King_admin编辑整张表限制————————
48
49 # ————————36PerfectCRM实现King_admin密码修改————————
50 modelform_exclude_fields=[]#排除验证字段
51 # ————————36PerfectCRM实现King_admin密码修改————————
52
53 # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
54 colored_fields = {}
55 # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
56
57 # ————————59PerfectCRM实现king_admin行内编辑————————
58 list_editable = []#可编辑
59 # ————————59PerfectCRM实现king_admin行内编辑————————
60
61 # ————————24PerfectCRM实现King_admin自定义操作数据————————
62 actions = []#自定功能
63
64 default_actions = ["delete_selected",] #默认删除的函数
65 #默认删除的函数
66 def delete_selected(self,request,queryset):
67 # from django.shortcuts import render, redirect
68 print("goint to delete ",queryset)
69 app_name=self.model._meta.app_label#app名
70 model_name=self.model._meta.model_name#表名
71 objs=queryset#类对象
72 action=request._admin_action
73 print(action,'<-------action')
74
75 # ————————33PerfectCRM实现King_admin编辑整张表限制————————
76 if self.readonly_table:
77 errors={'锁定的表单':'当前表单已经锁定,不可进行批量删除操作!'}
78 else:
79 errors={}
80 # ————————33PerfectCRM实现King_admin编辑整张表限制————————
81
82 if request.POST.get('delete_confirm')=='yes': #{#table_delete.html#}
83
84 # ————————33PerfectCRM实现King_admin编辑整张表限制————————
85 if not self.readonly_table:
86 # ————————33PerfectCRM实现King_admin编辑整张表限制————————
87 queryset.delete()
88 return redirect('/king_admin/%s/%s/'%(app_name,model_name))
89 else:
90 return redirect('/king_admin/%s/%s/' % (app_name, model_name))
91 selected_ids=','.join([str(i.id) for i in queryset])
92 print(selected_ids,'<---selected_ids')
93 objs=queryset
94 return render(request,"king_admin/table_delete.html", locals()) #返回删除页
95 delete_selected.short_description = "默认批量删除"
96 # ————————24PerfectCRM实现King_admin自定义操作数据————————
97
98 # ————————28PerfectCRM实现King_admin编辑限制————————
99 readonly_fields = [] # 不可修改
100
101 # ————————29PerfectCRM实现King_admin编辑自定义限制————————
102 #默认表单验证 全部 可重写
103 def default_form_validation(self,request):
104 #用户可以在此进行自定义的表单验证,相当于django form 的clean方法
105 '''默认表单验证 == django form 的clean方法'''
106 pass
107 # ————————29PerfectCRM实现King_admin编辑自定义限制————————
108 # ————————28PerfectCRM实现King_admin编辑限制————————
109
110
111 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
112 class AdminSite(object):
113 def __init__(self):
114 self.registered_sites = {} #传到views 里调用
115 def register(self,model,admin_class=None): #默认值None 使用 BaseAdmin
116 app_name = model._meta.app_label#用内置方法获取 APP名字 (crm)
117 model_name = model._meta.model_name#用内置方法获取 表名 (Customer)
118 if app_name not in self.registered_sites:
119 self.registered_sites[app_name] = {} #创建 crm={}
120 if model_name in self.registered_sites[app_name]:
121 raise AdminRegisterException("app [%s] model [%s] has already registered!异常"
122 %(app_name,model_name))#自定义异常,
123 if not admin_class:
124 admin_class = BaseAdmin #默认值None 使用 BaseAdmin
125 # self.registered_sites[app_name][model_name] = admin_class #注册APP
126 # site = AdminSite() # 实例化类 单例模式
127
128
129 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
130 #registered_sites {'crm': {'customer': <class 'crm.kingadmin.CustomerAdmin'>, 'courserecord': <class 'kingadmin.base_admin.BaseAdmin'>}}
131 #把类名放到class的对象里,然后通过class的对象传到前端
132 # admin_class.model = model
133 # self.registered_sites[app_name][model_name] = admin_class #注册APP
134 #
135 # site = AdminSite() #实例化类 单例模式
136 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
137
138 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
139 #没有实例化会使用同一个内存地址
140 admin_obj = admin_class() #先实例化
141 admin_obj.model = model #参数赋值给实例
142 self.registered_sites[app_name][model_name] = admin_obj#注册APP
143 #实例化后,调用会使用不同的内存地址
144
145 site = AdminSite() #实例化类 单例模式
146 # ————————06PerfectCRM实现King_admin注册功能获取内存优化处理————————
147
148 # registered_sites={}
149 # def register(model,admin_class=None): #默认值None 使用 BaseAdmin
150 # app_name = model._meta.app_label#用内置方法获取 APP名字 (crm)
151 # model_name = model._meta.model_name#用内置方法获取 表名 (Customer)
152 # if app_name not in registered_sites:
153 # registered_sites[app_name] = {} #创建 crm={}
154 # if model_name in registered_sites[app_name]:
155 # raise AdminRegisterException("app [%s] model [%s] has already registered!异常"
156 # %(app_name,model_name))#自定义异常
157 # if not admin_class:
158 # admin_class = BaseAdmin #默认值None 使用class BaseAdmin
159 # registered_sites[app_name][model_name] = admin_class #注册APP
160
161 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
162
163 # ————————04PerfectCRM实现King_admin注册功能————————
#base_admin.py